Version Description
Download this release
Release Info
Developer | fpcorso |
Plugin | Popup Maker – Popup Forms, Optins & More |
Version | 1.13.0 |
Comparing to | |
See all releases |
Code changes from version 1.12.0 to 1.13.0
- CHANGELOG.md +13 -0
- assets/js/pum-integration-formidableforms.js +3 -1
- assets/js/pum-integration-formidableforms.min.js +1 -1
- assets/js/site.js +1618 -230
- assets/js/site.min.js +1 -1
- classes/Abstract/Integration/Form.php +34 -0
- classes/Admin/Onboarding.php +180 -29
- classes/Admin/Popups.php +58 -49
- classes/Admin/Settings.php +10 -6
- classes/Analytics.php +73 -7
- classes/Extension/License.php +19 -9
- classes/Integration/Form/CalderaForms.php +7 -7
- classes/Integration/Form/ContactForm7.php +8 -9
- classes/Integration/Form/FormidableForms.php +7 -7
- classes/Integration/Form/GravityForms.php +13 -6
- classes/Integration/Form/MC4WP.php +0 -5
- classes/Integration/Form/NinjaForms.php +14 -7
- classes/Integration/Form/PirateForms.php +6 -6
- classes/Integration/Form/WPForms.php +6 -6
- classes/Upsell.php +45 -42
- classes/Utils/Alerts.php +7 -5
- languages/popup-maker.pot +235 -199
- packages/action-scheduler/Gruntfile.js +57 -0
- packages/action-scheduler/codecov.yml +13 -0
- packages/action-scheduler/composer.json +36 -0
- packages/action-scheduler/composer.lock +4878 -0
- packages/action-scheduler/docs/_config.yml +7 -0
- packages/action-scheduler/docs/_layouts/default.html +59 -0
- packages/action-scheduler/docs/admin.md +22 -0
- packages/action-scheduler/docs/android-chrome-192x192.png +0 -0
- packages/action-scheduler/docs/android-chrome-256x256.png +0 -0
- packages/action-scheduler/docs/api.md +224 -0
- packages/action-scheduler/docs/apple-touch-icon.png +0 -0
- packages/action-scheduler/docs/assets/css/style.scss +57 -0
- packages/action-scheduler/docs/browserconfig.xml +9 -0
- packages/action-scheduler/docs/faq.md +107 -0
- packages/action-scheduler/docs/favicon-16x16.png +0 -0
- packages/action-scheduler/docs/favicon-32x32.png +0 -0
- packages/action-scheduler/docs/favicon.ico +0 -0
- packages/action-scheduler/docs/google14ef723abb376cd3.html +1 -0
- packages/action-scheduler/docs/index.md +66 -0
- packages/action-scheduler/docs/mstile-150x150.png +0 -0
- packages/action-scheduler/docs/perf.md +132 -0
- packages/action-scheduler/docs/safari-pinned-tab.svg +40 -0
- packages/action-scheduler/docs/site.webmanifest +19 -0
- packages/action-scheduler/docs/usage.md +126 -0
- packages/action-scheduler/docs/version3-0.md +68 -0
- packages/action-scheduler/docs/wp-cli.md +77 -0
- packages/action-scheduler/package-lock.json +2138 -0
- packages/action-scheduler/package.json +39 -0
- packages/action-scheduler/phpcs.xml +39 -0
- packages/action-scheduler/tests/ActionScheduler_UnitTestCase.php +44 -0
- packages/action-scheduler/tests/bootstrap.php +34 -0
- packages/action-scheduler/tests/phpunit.xml.dist +48 -0
- packages/action-scheduler/tests/phpunit/ActionScheduler_Mock_Async_Request_QueueRunner.php +19 -0
- packages/action-scheduler/tests/phpunit/ActionScheduler_Mocker.php +35 -0
- packages/action-scheduler/tests/phpunit/deprecated/ActionScheduler_UnitTestCase.php +44 -0
- packages/action-scheduler/tests/phpunit/helpers/ActionScheduler_TimezoneHelper_Test.php +100 -0
- packages/action-scheduler/tests/phpunit/jobs/ActionScheduler_Action_Test.php +55 -0
- packages/action-scheduler/tests/phpunit/jobs/ActionScheduler_NullAction_Test.php +16 -0
- packages/action-scheduler/tests/phpunit/jobstore/ActionScheduler_DBStoreMigrator_Test.php +26 -0
- packages/action-scheduler/tests/phpunit/jobstore/ActionScheduler_DBStore_Test.php +396 -0
- packages/action-scheduler/tests/phpunit/jobstore/ActionScheduler_HybridStore_Test.php +273 -0
- packages/action-scheduler/tests/phpunit/jobstore/ActionScheduler_wpPostStore_Test.php +414 -0
- packages/action-scheduler/tests/phpunit/lock/ActionScheduler_OptionLock_Test.php +45 -0
- packages/action-scheduler/tests/phpunit/logging/ActionScheduler_DBLogger_Test.php +132 -0
- packages/action-scheduler/tests/phpunit/logging/ActionScheduler_wpCommentLogger_Test.php +211 -0
- packages/action-scheduler/tests/phpunit/migration/ActionMigrator_Test.php +145 -0
- packages/action-scheduler/tests/phpunit/migration/BatchFetcher_Test.php +76 -0
- packages/action-scheduler/tests/phpunit/migration/Config_Test.php +33 -0
- packages/action-scheduler/tests/phpunit/migration/LogMigrator_Test.php +44 -0
- packages/action-scheduler/tests/phpunit/migration/Runner_Test.php +92 -0
- packages/action-scheduler/tests/phpunit/migration/Scheduler_Test.php +118 -0
- packages/action-scheduler/tests/phpunit/procedural_api/procedural_api_Test.php +259 -0
- packages/action-scheduler/tests/phpunit/procedural_api/wc_get_scheduled_actions_Test.php +100 -0
- packages/action-scheduler/tests/phpunit/runner/ActionScheduler_QueueCleaner_Test.php +151 -0
- packages/action-scheduler/tests/phpunit/runner/ActionScheduler_QueueRunner_Test.php +330 -0
- packages/action-scheduler/tests/phpunit/schedules/ActionScheduler_CronSchedule_Test.php +76 -0
- packages/action-scheduler/tests/phpunit/schedules/ActionScheduler_IntervalSchedule_Test.php +37 -0
- packages/action-scheduler/tests/phpunit/schedules/ActionScheduler_NullSchedule_Test.php +18 -0
- packages/action-scheduler/tests/phpunit/schedules/ActionScheduler_SimpleSchedule_Test.php +37 -0
- packages/action-scheduler/tests/phpunit/versioning/ActionScheduler_Versions_Test.php +43 -0
- packages/action-scheduler/tests/travis/setup.sh +38 -0
- packages/action-scheduler/tests/travis/wp-tests-config.php +38 -0
- phpunit.xml.dist +15 -0
- popup-maker.php +3 -3
- readme.txt +15 -23
- tests/bootstrap.php +31 -0
- tests/test-pum-analytics.php +75 -0
- tests/test-pum_admin_onboarding.php +58 -0
- tests/test-pum_utils_array.php +31 -0
CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
### v1.12.0 - 09/29/2020
|
2 |
* Feature: Add the ability to turn on/off popups [Issue #544](https://github.com/PopupMaker/Popup-Maker/issues/544)
|
3 |
* Feature: Formidable Forms integration [Issue #750](https://github.com/PopupMaker/Popup-Maker/issues/750)
|
1 |
+
### [v1.13.0 - 10/30/2020](https://github.com/PopupMaker/Popup-Maker/milestone/26)
|
2 |
+
* Feature: Conversion tracking [Issue #775](https://github.com/PopupMaker/Popup-Maker/issues/775)
|
3 |
+
* Feature: Bypass adblockers for tracking opens and conversions [Issue #783](https://github.com/PopupMaker/Popup-Maker/issues/783)
|
4 |
+
* Feature: Periodical suggestions to improve plugin usage [Issue #834](https://github.com/PopupMaker/Popup-Maker/issues/834)
|
5 |
+
* Improvement: Reduce clutter in All Popups table [Issue #878](https://github.com/PopupMaker/Popup-Maker/issues/878)
|
6 |
+
* Improvement: Switch tab navigation to NAV elements instead of H2 [Issue #818](https://github.com/PopupMaker/Popup-Maker/issues/818)
|
7 |
+
* Improvement: Set up PHPUnit for integration and unit tests [Issue #563](https://github.com/PopupMaker/Popup-Maker/issues/563)
|
8 |
+
* Improvement: Continuously deploy readme and screenshot changes [Issue #827](https://github.com/PopupMaker/Popup-Maker/issues/827)
|
9 |
+
* Fix: AJAX for Gravity Forms not setting cookies [Issue #706](https://github.com/PopupMaker/Popup-Maker/issues/706)
|
10 |
+
* Fix: Disabling asset cache causes form integrations not to load their assets [Issue #755](https://github.com/PopupMaker/Popup-Maker/issues/755)
|
11 |
+
* Fix: Form submission cookies are not being set for some form integrations [Issue #886](https://github.com/PopupMaker/Popup-Maker/issues/886)
|
12 |
+
* Fix: Some form integrations are calling both AJAX and PHP submission handlers [Issue #887](https://github.com/PopupMaker/Popup-Maker/issues/887)
|
13 |
+
|
14 |
### v1.12.0 - 09/29/2020
|
15 |
* Feature: Add the ability to turn on/off popups [Issue #544](https://github.com/PopupMaker/Popup-Maker/issues/544)
|
16 |
* Feature: Formidable Forms integration [Issue #750](https://github.com/PopupMaker/Popup-Maker/issues/750)
|
assets/js/pum-integration-formidableforms.js
CHANGED
@@ -101,9 +101,11 @@
|
|
101 |
var $ = window.jQuery;
|
102 |
$(document).on("frmFormComplete", function (event, form, response) {
|
103 |
var $form = $(form);
|
104 |
-
var formId = $form.find('input[name="form_id"]').val();
|
|
|
105 |
|
106 |
window.PUM.integrations.formSubmission($form, {
|
|
|
107 |
formProvider: formProvider,
|
108 |
formId: formId,
|
109 |
extras: {
|
101 |
var $ = window.jQuery;
|
102 |
$(document).on("frmFormComplete", function (event, form, response) {
|
103 |
var $form = $(form);
|
104 |
+
var formId = $form.find('input[name="form_id"]').val();
|
105 |
+
var $popup = PUM.getPopup($form.find('input[name="pum_form_popup_id"]').val()); // All the magic happens here.
|
106 |
|
107 |
window.PUM.integrations.formSubmission($form, {
|
108 |
+
popup: $popup,
|
109 |
formProvider: formProvider,
|
110 |
formId: formId,
|
111 |
extras: {
|
assets/js/pum-integration-formidableforms.min.js
CHANGED
@@ -2,4 +2,4 @@
|
|
2 |
/*!******************************************************!*\
|
3 |
!*** ./assets/js/src/integration/formidableforms.js ***!
|
4 |
\******************************************************/
|
5 |
-
/*! no static exports found */function(e,r){var
|
2 |
/*!******************************************************!*\
|
3 |
!*** ./assets/js/src/integration/formidableforms.js ***!
|
4 |
\******************************************************/
|
5 |
+
/*! no static exports found */function(e,r){var u=window.jQuery;u(document).on("frmFormComplete",function(e,r,n){var t=u(r),o=t.find('input[name="form_id"]').val(),i=PUM.getPopup(t.find('input[name="pum_form_popup_id"]').val());window.PUM.integrations.formSubmission(t,{popup:i,formProvider:"formidableforms",formId:o,extras:{response:n}})})}});
|
assets/js/site.js
CHANGED
@@ -75,6 +75,7 @@ var PUM;
|
|
75 |
pm_dir_url: '',
|
76 |
ajaxurl: '',
|
77 |
restapi: false,
|
|
|
78 |
rest_nonce: null,
|
79 |
debug_mode: false,
|
80 |
disable_tracking: true,
|
@@ -803,6 +804,1315 @@ var PUM;
|
|
803 |
|
804 |
}(jQuery, document));
|
805 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
806 |
/**
|
807 |
* Initialize Popup Maker.
|
808 |
* Version 1.8
|
@@ -1007,66 +2317,116 @@ var PUM_Accessibility;
|
|
1007 |
*/
|
1008 |
|
1009 |
var PUM_Analytics;
|
1010 |
-
(function
|
1011 |
-
|
1012 |
-
|
1013 |
-
$.fn.popmake.last_open_trigger = null;
|
1014 |
-
$.fn.popmake.last_close_trigger = null;
|
1015 |
-
$.fn.popmake.conversion_trigger = null;
|
1016 |
-
|
1017 |
-
var rest_enabled = !!(typeof pum_vars.restapi !== 'undefined' && pum_vars.restapi);
|
1018 |
-
|
1019 |
-
PUM_Analytics = {
|
1020 |
-
beacon: function (data, callback) {
|
1021 |
-
var beacon = new Image(),
|
1022 |
-
url = rest_enabled ? pum_vars.restapi : pum_vars.ajaxurl,
|
1023 |
-
opts = {
|
1024 |
-
route: pum.hooks.applyFilters( 'pum.analyticsBeaconRoute', '/analytics/' ),
|
1025 |
-
data: pum.hooks.applyFilters( 'pum.AnalyticsBeaconData', $.extend( true, {
|
1026 |
-
event: 'open',
|
1027 |
-
pid: null,
|
1028 |
-
_cache: (+(new Date()))
|
1029 |
-
}, data ) ),
|
1030 |
-
callback: typeof callback === 'function' ? callback : function () {
|
1031 |
-
}
|
1032 |
-
};
|
1033 |
-
|
1034 |
-
if (!rest_enabled) {
|
1035 |
-
opts.data.action = 'pum_analytics';
|
1036 |
-
} else {
|
1037 |
-
url += opts.route;
|
1038 |
-
}
|
1039 |
|
1040 |
-
|
1041 |
-
|
1042 |
-
|
1043 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1044 |
|
1045 |
-
|
1046 |
-
|
1047 |
-
|
1048 |
-
|
1049 |
-
};
|
1050 |
|
1051 |
-
|
1052 |
-
|
1053 |
-
|
1054 |
-
|
1055 |
-
|
1056 |
-
|
1057 |
-
|
1058 |
-
|
1059 |
-
|
1060 |
-
|
1061 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1062 |
|
1063 |
-
|
1064 |
-
|
1065 |
-
|
1066 |
-
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1070 |
/**
|
1071 |
* Defines the core $.popmake animations.
|
1072 |
* Version 1.4
|
@@ -1675,189 +3035,217 @@ var pm_cookie, pm_cookie_json, pm_remove_cookie;
|
|
1675 |
pm_remove_cookie = $.pm_remove_cookie = $.fn.popmake.cookie.remove;
|
1676 |
|
1677 |
}(jQuery));
|
1678 |
-
(function
|
1679 |
-
|
1680 |
-
|
1681 |
-
var setCookie = function (settings) {
|
1682 |
-
$.pm_cookie(
|
1683 |
-
settings.name,
|
1684 |
-
true,
|
1685 |
-
settings.session ? null : settings.time,
|
1686 |
-
settings.path ? pum_vars.home_url || '/' : null
|
1687 |
-
);
|
1688 |
-
pum.hooks.doAction('popmake.setCookie', settings);
|
1689 |
-
};
|
1690 |
-
|
1691 |
-
$.extend($.fn.popmake.methods, {
|
1692 |
-
addCookie: function (type) {
|
1693 |
-
// Method calling logic
|
1694 |
-
|
1695 |
-
pum.hooks.doAction('popmake.addCookie', arguments);
|
1696 |
-
|
1697 |
-
if ($.fn.popmake.cookies[type]) {
|
1698 |
-
return $.fn.popmake.cookies[type].apply(this, Array.prototype.slice.call(arguments, 1));
|
1699 |
-
}
|
1700 |
-
if (window.console) {
|
1701 |
-
console.warn('Cookie type ' + type + ' does not exist.');
|
1702 |
-
}
|
1703 |
-
return this;
|
1704 |
-
},
|
1705 |
-
setCookie: setCookie,
|
1706 |
-
checkCookies: function (settings) {
|
1707 |
-
var i,
|
1708 |
-
ret = false;
|
1709 |
-
|
1710 |
-
if (settings.cookie_name === undefined || settings.cookie_name === null || settings.cookie_name === '') {
|
1711 |
-
return false;
|
1712 |
-
}
|
1713 |
-
|
1714 |
-
switch (typeof settings.cookie_name) {
|
1715 |
-
case 'object':
|
1716 |
-
case 'array':
|
1717 |
-
for (i = 0; settings.cookie_name.length > i; i += 1) {
|
1718 |
-
if ($.pm_cookie(settings.cookie_name[i]) !== undefined) {
|
1719 |
-
ret = true;
|
1720 |
-
}
|
1721 |
-
}
|
1722 |
-
break;
|
1723 |
-
case 'string':
|
1724 |
-
if ($.pm_cookie(settings.cookie_name) !== undefined) {
|
1725 |
-
ret = true;
|
1726 |
-
}
|
1727 |
-
break;
|
1728 |
-
}
|
1729 |
-
|
1730 |
-
pum.hooks.doAction('popmake.checkCookies', settings, ret);
|
1731 |
-
|
1732 |
-
return ret;
|
1733 |
-
}
|
1734 |
-
});
|
1735 |
-
|
1736 |
-
$.fn.popmake.cookies = $.fn.popmake.cookies || {};
|
1737 |
-
|
1738 |
-
$.extend($.fn.popmake.cookies, {
|
1739 |
-
on_popup_open: function (settings) {
|
1740 |
-
var $popup = PUM.getPopup(this);
|
1741 |
-
$popup.on('pumAfterOpen', function () {
|
1742 |
-
$popup.popmake('setCookie', settings);
|
1743 |
-
});
|
1744 |
-
},
|
1745 |
-
on_popup_close: function (settings) {
|
1746 |
-
var $popup = PUM.getPopup(this);
|
1747 |
-
$popup.on('pumBeforeClose', function () {
|
1748 |
-
$popup.popmake('setCookie', settings);
|
1749 |
-
});
|
1750 |
-
},
|
1751 |
-
form_submission: function ( settings ) {
|
1752 |
-
var $popup = PUM.getPopup( this );
|
1753 |
|
1754 |
-
|
1755 |
-
|
1756 |
-
|
1757 |
-
|
1758 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1759 |
|
1760 |
-
|
1761 |
-
|
1762 |
-
|
1763 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1764 |
|
1765 |
-
|
1766 |
-
if (
|
1767 |
-
( settings.only_in_popup && PUM.getPopup( form ).length && PUM.getPopup( form ).is( $popup ) ) ||
|
1768 |
-
! settings.only_in_popup
|
1769 |
-
) {
|
1770 |
-
$popup.popmake( 'setCookie', settings );
|
1771 |
-
}
|
1772 |
-
}
|
1773 |
-
} );
|
1774 |
-
},
|
1775 |
-
manual: function (settings) {
|
1776 |
-
var $popup = PUM.getPopup(this);
|
1777 |
-
$popup.on('pumSetCookie', function () {
|
1778 |
-
$popup.popmake('setCookie', settings);
|
1779 |
-
});
|
1780 |
-
},
|
1781 |
-
form_success: function (settings) {
|
1782 |
-
var $popup = PUM.getPopup(this);
|
1783 |
-
$popup.on('pumFormSuccess', function () {
|
1784 |
-
$popup.popmake('setCookie', settings);
|
1785 |
-
});
|
1786 |
-
},
|
1787 |
-
pum_sub_form_success: function (settings) {
|
1788 |
-
var $popup = PUM.getPopup(this);
|
1789 |
-
$popup.find('form.pum-sub-form').on('success', function () {
|
1790 |
-
$popup.popmake('setCookie', settings);
|
1791 |
-
});
|
1792 |
-
},
|
1793 |
-
/**
|
1794 |
-
* @deprecated 1.7.0
|
1795 |
-
*
|
1796 |
-
* @param settings
|
1797 |
-
*/
|
1798 |
-
pum_sub_form_already_subscribed: function (settings) {
|
1799 |
-
var $popup = PUM.getPopup(this);
|
1800 |
-
$popup.find('form.pum-sub-form').on('success', function () {
|
1801 |
-
$popup.popmake('setCookie', settings);
|
1802 |
-
});
|
1803 |
-
},
|
1804 |
-
ninja_form_success: function (settings) {
|
1805 |
-
return $.fn.popmake.cookies.form_success.apply(this, arguments);
|
1806 |
-
},
|
1807 |
-
cf7_form_success: function (settings) {
|
1808 |
-
return $.fn.popmake.cookies.form_success.apply(this, arguments);
|
1809 |
-
},
|
1810 |
-
gforms_form_success: function (settings) {
|
1811 |
-
return $.fn.popmake.cookies.form_success.apply(this, arguments);
|
1812 |
-
}
|
1813 |
-
});
|
1814 |
|
1815 |
-
|
1816 |
-
|
1817 |
-
|
1818 |
-
var $cookies = $('.pum-cookie');
|
1819 |
|
1820 |
-
|
1821 |
-
var $cookie = $(this),
|
1822 |
-
index = $cookies.index($cookie),
|
1823 |
-
args = $cookie.data('cookie-args');
|
1824 |
|
1825 |
-
|
1826 |
-
|
1827 |
-
|
1828 |
-
|
1829 |
-
|
1830 |
-
|
1831 |
-
|
1832 |
-
|
1833 |
-
|
1834 |
-
|
1835 |
-
|
1836 |
-
|
|
|
|
|
|
|
1837 |
|
1838 |
-
|
1839 |
-
|
1840 |
-
|
1841 |
-
|
1842 |
-
|
1843 |
-
|
1844 |
-
|
1845 |
-
|
1846 |
-
|
1847 |
-
|
1848 |
-
|
1849 |
-
|
1850 |
-
|
|
|
|
|
|
|
1851 |
|
1852 |
-
|
1853 |
-
|
1854 |
-
|
1855 |
-
|
1856 |
-
|
1857 |
-
|
1858 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1859 |
|
1860 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1861 |
|
1862 |
var pum_debug_mode = false,
|
1863 |
pum_debug;
|
75 |
pm_dir_url: '',
|
76 |
ajaxurl: '',
|
77 |
restapi: false,
|
78 |
+
analytics_api: false,
|
79 |
rest_nonce: null,
|
80 |
debug_mode: false,
|
81 |
disable_tracking: true,
|
804 |
|
805 |
}(jQuery, document));
|
806 |
|
807 |
+
/******/ (function(modules) { // webpackBootstrap
|
808 |
+
/******/ // The module cache
|
809 |
+
/******/ var installedModules = {};
|
810 |
+
/******/
|
811 |
+
/******/ // The require function
|
812 |
+
/******/ function __webpack_require__(moduleId) {
|
813 |
+
/******/
|
814 |
+
/******/ // Check if module is in cache
|
815 |
+
/******/ if(installedModules[moduleId]) {
|
816 |
+
/******/ return installedModules[moduleId].exports;
|
817 |
+
/******/ }
|
818 |
+
/******/ // Create a new module (and put it into the cache)
|
819 |
+
/******/ var module = installedModules[moduleId] = {
|
820 |
+
/******/ i: moduleId,
|
821 |
+
/******/ l: false,
|
822 |
+
/******/ exports: {}
|
823 |
+
/******/ };
|
824 |
+
/******/
|
825 |
+
/******/ // Execute the module function
|
826 |
+
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
827 |
+
/******/
|
828 |
+
/******/ // Flag the module as loaded
|
829 |
+
/******/ module.l = true;
|
830 |
+
/******/
|
831 |
+
/******/ // Return the exports of the module
|
832 |
+
/******/ return module.exports;
|
833 |
+
/******/ }
|
834 |
+
/******/
|
835 |
+
/******/
|
836 |
+
/******/ // expose the modules object (__webpack_modules__)
|
837 |
+
/******/ __webpack_require__.m = modules;
|
838 |
+
/******/
|
839 |
+
/******/ // expose the module cache
|
840 |
+
/******/ __webpack_require__.c = installedModules;
|
841 |
+
/******/
|
842 |
+
/******/ // define getter function for harmony exports
|
843 |
+
/******/ __webpack_require__.d = function(exports, name, getter) {
|
844 |
+
/******/ if(!__webpack_require__.o(exports, name)) {
|
845 |
+
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
846 |
+
/******/ }
|
847 |
+
/******/ };
|
848 |
+
/******/
|
849 |
+
/******/ // define __esModule on exports
|
850 |
+
/******/ __webpack_require__.r = function(exports) {
|
851 |
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
852 |
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
853 |
+
/******/ }
|
854 |
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
855 |
+
/******/ };
|
856 |
+
/******/
|
857 |
+
/******/ // create a fake namespace object
|
858 |
+
/******/ // mode & 1: value is a module id, require it
|
859 |
+
/******/ // mode & 2: merge all properties of value into the ns
|
860 |
+
/******/ // mode & 4: return value when already ns object
|
861 |
+
/******/ // mode & 8|1: behave like require
|
862 |
+
/******/ __webpack_require__.t = function(value, mode) {
|
863 |
+
/******/ if(mode & 1) value = __webpack_require__(value);
|
864 |
+
/******/ if(mode & 8) return value;
|
865 |
+
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
866 |
+
/******/ var ns = Object.create(null);
|
867 |
+
/******/ __webpack_require__.r(ns);
|
868 |
+
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
869 |
+
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
870 |
+
/******/ return ns;
|
871 |
+
/******/ };
|
872 |
+
/******/
|
873 |
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
874 |
+
/******/ __webpack_require__.n = function(module) {
|
875 |
+
/******/ var getter = module && module.__esModule ?
|
876 |
+
/******/ function getDefault() { return module['default']; } :
|
877 |
+
/******/ function getModuleExports() { return module; };
|
878 |
+
/******/ __webpack_require__.d(getter, 'a', getter);
|
879 |
+
/******/ return getter;
|
880 |
+
/******/ };
|
881 |
+
/******/
|
882 |
+
/******/ // Object.prototype.hasOwnProperty.call
|
883 |
+
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
884 |
+
/******/
|
885 |
+
/******/ // __webpack_public_path__
|
886 |
+
/******/ __webpack_require__.p = "";
|
887 |
+
/******/
|
888 |
+
/******/
|
889 |
+
/******/ // Load entry module and return exports
|
890 |
+
/******/ return __webpack_require__(__webpack_require__.s = "./assets/js/src/integration/calderaforms.js");
|
891 |
+
/******/ })
|
892 |
+
/************************************************************************/
|
893 |
+
/******/ ({
|
894 |
+
|
895 |
+
/***/ "./assets/js/src/integration/calderaforms.js":
|
896 |
+
/*!***************************************************!*\
|
897 |
+
!*** ./assets/js/src/integration/calderaforms.js ***!
|
898 |
+
\***************************************************/
|
899 |
+
/*! no exports provided */
|
900 |
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
901 |
+
|
902 |
+
"use strict";
|
903 |
+
__webpack_require__.r(__webpack_exports__);
|
904 |
+
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/slicedToArray.js");
|
905 |
+
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
|
906 |
+
|
907 |
+
|
908 |
+
/*******************************************************************************
|
909 |
+
* Copyright (c) 2020, WP Popup Maker
|
910 |
+
******************************************************************************/
|
911 |
+
{
|
912 |
+
var formProvider = 'calderaforms';
|
913 |
+
var $ = window.jQuery;
|
914 |
+
var $form;
|
915 |
+
/**
|
916 |
+
* This function is run before every CF Ajax call to store the form being submitted.
|
917 |
+
*
|
918 |
+
* @param event
|
919 |
+
* @param obj
|
920 |
+
*/
|
921 |
+
|
922 |
+
var beforeAjax = function beforeAjax(event, obj) {
|
923 |
+
return $form = obj.$form;
|
924 |
+
};
|
925 |
+
|
926 |
+
$(document).on('cf.ajax.request', beforeAjax) // After all requests
|
927 |
+
.on('cf.submission', function (event, obj) {
|
928 |
+
// Only if status of request is complete|success.
|
929 |
+
if ('complete' === obj.data.status || 'success' === obj.data.status) {
|
930 |
+
//get the form that is submiting's ID attribute
|
931 |
+
var _$form$attr$split = $form.attr('id').split('_'),
|
932 |
+
_$form$attr$split2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_$form$attr$split, 2),
|
933 |
+
formId = _$form$attr$split2[0],
|
934 |
+
_$form$attr$split2$ = _$form$attr$split2[1],
|
935 |
+
formInstanceId = _$form$attr$split2$ === void 0 ? null : _$form$attr$split2$; // All the magic happens here.
|
936 |
+
|
937 |
+
|
938 |
+
window.PUM.integrations.formSubmission($form, {
|
939 |
+
formProvider: formProvider,
|
940 |
+
formId: formId,
|
941 |
+
formInstanceId: formInstanceId,
|
942 |
+
extras: {
|
943 |
+
state: window.cfstate.hasOwnProperty(formId) ? window.cfstate[formId] : null
|
944 |
+
}
|
945 |
+
});
|
946 |
+
}
|
947 |
+
});
|
948 |
+
}
|
949 |
+
|
950 |
+
/***/ }),
|
951 |
+
|
952 |
+
/***/ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js":
|
953 |
+
/*!*****************************************************************!*\
|
954 |
+
!*** ./node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***!
|
955 |
+
\*****************************************************************/
|
956 |
+
/*! no static exports found */
|
957 |
+
/***/ (function(module, exports) {
|
958 |
+
|
959 |
+
function _arrayLikeToArray(arr, len) {
|
960 |
+
if (len == null || len > arr.length) len = arr.length;
|
961 |
+
|
962 |
+
for (var i = 0, arr2 = new Array(len); i < len; i++) {
|
963 |
+
arr2[i] = arr[i];
|
964 |
+
}
|
965 |
+
|
966 |
+
return arr2;
|
967 |
+
}
|
968 |
+
|
969 |
+
module.exports = _arrayLikeToArray;
|
970 |
+
|
971 |
+
/***/ }),
|
972 |
+
|
973 |
+
/***/ "./node_modules/@babel/runtime/helpers/arrayWithHoles.js":
|
974 |
+
/*!***************************************************************!*\
|
975 |
+
!*** ./node_modules/@babel/runtime/helpers/arrayWithHoles.js ***!
|
976 |
+
\***************************************************************/
|
977 |
+
/*! no static exports found */
|
978 |
+
/***/ (function(module, exports) {
|
979 |
+
|
980 |
+
function _arrayWithHoles(arr) {
|
981 |
+
if (Array.isArray(arr)) return arr;
|
982 |
+
}
|
983 |
+
|
984 |
+
module.exports = _arrayWithHoles;
|
985 |
+
|
986 |
+
/***/ }),
|
987 |
+
|
988 |
+
/***/ "./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js":
|
989 |
+
/*!*********************************************************************!*\
|
990 |
+
!*** ./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***!
|
991 |
+
\*********************************************************************/
|
992 |
+
/*! no static exports found */
|
993 |
+
/***/ (function(module, exports) {
|
994 |
+
|
995 |
+
function _iterableToArrayLimit(arr, i) {
|
996 |
+
if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
|
997 |
+
var _arr = [];
|
998 |
+
var _n = true;
|
999 |
+
var _d = false;
|
1000 |
+
var _e = undefined;
|
1001 |
+
|
1002 |
+
try {
|
1003 |
+
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
|
1004 |
+
_arr.push(_s.value);
|
1005 |
+
|
1006 |
+
if (i && _arr.length === i) break;
|
1007 |
+
}
|
1008 |
+
} catch (err) {
|
1009 |
+
_d = true;
|
1010 |
+
_e = err;
|
1011 |
+
} finally {
|
1012 |
+
try {
|
1013 |
+
if (!_n && _i["return"] != null) _i["return"]();
|
1014 |
+
} finally {
|
1015 |
+
if (_d) throw _e;
|
1016 |
+
}
|
1017 |
+
}
|
1018 |
+
|
1019 |
+
return _arr;
|
1020 |
+
}
|
1021 |
+
|
1022 |
+
module.exports = _iterableToArrayLimit;
|
1023 |
+
|
1024 |
+
/***/ }),
|
1025 |
+
|
1026 |
+
/***/ "./node_modules/@babel/runtime/helpers/nonIterableRest.js":
|
1027 |
+
/*!****************************************************************!*\
|
1028 |
+
!*** ./node_modules/@babel/runtime/helpers/nonIterableRest.js ***!
|
1029 |
+
\****************************************************************/
|
1030 |
+
/*! no static exports found */
|
1031 |
+
/***/ (function(module, exports) {
|
1032 |
+
|
1033 |
+
function _nonIterableRest() {
|
1034 |
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
1035 |
+
}
|
1036 |
+
|
1037 |
+
module.exports = _nonIterableRest;
|
1038 |
+
|
1039 |
+
/***/ }),
|
1040 |
+
|
1041 |
+
/***/ "./node_modules/@babel/runtime/helpers/slicedToArray.js":
|
1042 |
+
/*!**************************************************************!*\
|
1043 |
+
!*** ./node_modules/@babel/runtime/helpers/slicedToArray.js ***!
|
1044 |
+
\**************************************************************/
|
1045 |
+
/*! no static exports found */
|
1046 |
+
/***/ (function(module, exports, __webpack_require__) {
|
1047 |
+
|
1048 |
+
var arrayWithHoles = __webpack_require__(/*! ./arrayWithHoles */ "./node_modules/@babel/runtime/helpers/arrayWithHoles.js");
|
1049 |
+
|
1050 |
+
var iterableToArrayLimit = __webpack_require__(/*! ./iterableToArrayLimit */ "./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js");
|
1051 |
+
|
1052 |
+
var unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray */ "./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js");
|
1053 |
+
|
1054 |
+
var nonIterableRest = __webpack_require__(/*! ./nonIterableRest */ "./node_modules/@babel/runtime/helpers/nonIterableRest.js");
|
1055 |
+
|
1056 |
+
function _slicedToArray(arr, i) {
|
1057 |
+
return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();
|
1058 |
+
}
|
1059 |
+
|
1060 |
+
module.exports = _slicedToArray;
|
1061 |
+
|
1062 |
+
/***/ }),
|
1063 |
+
|
1064 |
+
/***/ "./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js":
|
1065 |
+
/*!***************************************************************************!*\
|
1066 |
+
!*** ./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***!
|
1067 |
+
\***************************************************************************/
|
1068 |
+
/*! no static exports found */
|
1069 |
+
/***/ (function(module, exports, __webpack_require__) {
|
1070 |
+
|
1071 |
+
var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray */ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js");
|
1072 |
+
|
1073 |
+
function _unsupportedIterableToArray(o, minLen) {
|
1074 |
+
if (!o) return;
|
1075 |
+
if (typeof o === "string") return arrayLikeToArray(o, minLen);
|
1076 |
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
1077 |
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
1078 |
+
if (n === "Map" || n === "Set") return Array.from(o);
|
1079 |
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);
|
1080 |
+
}
|
1081 |
+
|
1082 |
+
module.exports = _unsupportedIterableToArray;
|
1083 |
+
|
1084 |
+
/***/ })
|
1085 |
+
|
1086 |
+
/******/ });
|
1087 |
+
/******/ (function(modules) { // webpackBootstrap
|
1088 |
+
/******/ // The module cache
|
1089 |
+
/******/ var installedModules = {};
|
1090 |
+
/******/
|
1091 |
+
/******/ // The require function
|
1092 |
+
/******/ function __webpack_require__(moduleId) {
|
1093 |
+
/******/
|
1094 |
+
/******/ // Check if module is in cache
|
1095 |
+
/******/ if(installedModules[moduleId]) {
|
1096 |
+
/******/ return installedModules[moduleId].exports;
|
1097 |
+
/******/ }
|
1098 |
+
/******/ // Create a new module (and put it into the cache)
|
1099 |
+
/******/ var module = installedModules[moduleId] = {
|
1100 |
+
/******/ i: moduleId,
|
1101 |
+
/******/ l: false,
|
1102 |
+
/******/ exports: {}
|
1103 |
+
/******/ };
|
1104 |
+
/******/
|
1105 |
+
/******/ // Execute the module function
|
1106 |
+
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
1107 |
+
/******/
|
1108 |
+
/******/ // Flag the module as loaded
|
1109 |
+
/******/ module.l = true;
|
1110 |
+
/******/
|
1111 |
+
/******/ // Return the exports of the module
|
1112 |
+
/******/ return module.exports;
|
1113 |
+
/******/ }
|
1114 |
+
/******/
|
1115 |
+
/******/
|
1116 |
+
/******/ // expose the modules object (__webpack_modules__)
|
1117 |
+
/******/ __webpack_require__.m = modules;
|
1118 |
+
/******/
|
1119 |
+
/******/ // expose the module cache
|
1120 |
+
/******/ __webpack_require__.c = installedModules;
|
1121 |
+
/******/
|
1122 |
+
/******/ // define getter function for harmony exports
|
1123 |
+
/******/ __webpack_require__.d = function(exports, name, getter) {
|
1124 |
+
/******/ if(!__webpack_require__.o(exports, name)) {
|
1125 |
+
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
1126 |
+
/******/ }
|
1127 |
+
/******/ };
|
1128 |
+
/******/
|
1129 |
+
/******/ // define __esModule on exports
|
1130 |
+
/******/ __webpack_require__.r = function(exports) {
|
1131 |
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
1132 |
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
1133 |
+
/******/ }
|
1134 |
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
1135 |
+
/******/ };
|
1136 |
+
/******/
|
1137 |
+
/******/ // create a fake namespace object
|
1138 |
+
/******/ // mode & 1: value is a module id, require it
|
1139 |
+
/******/ // mode & 2: merge all properties of value into the ns
|
1140 |
+
/******/ // mode & 4: return value when already ns object
|
1141 |
+
/******/ // mode & 8|1: behave like require
|
1142 |
+
/******/ __webpack_require__.t = function(value, mode) {
|
1143 |
+
/******/ if(mode & 1) value = __webpack_require__(value);
|
1144 |
+
/******/ if(mode & 8) return value;
|
1145 |
+
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
1146 |
+
/******/ var ns = Object.create(null);
|
1147 |
+
/******/ __webpack_require__.r(ns);
|
1148 |
+
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
1149 |
+
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
1150 |
+
/******/ return ns;
|
1151 |
+
/******/ };
|
1152 |
+
/******/
|
1153 |
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
1154 |
+
/******/ __webpack_require__.n = function(module) {
|
1155 |
+
/******/ var getter = module && module.__esModule ?
|
1156 |
+
/******/ function getDefault() { return module['default']; } :
|
1157 |
+
/******/ function getModuleExports() { return module; };
|
1158 |
+
/******/ __webpack_require__.d(getter, 'a', getter);
|
1159 |
+
/******/ return getter;
|
1160 |
+
/******/ };
|
1161 |
+
/******/
|
1162 |
+
/******/ // Object.prototype.hasOwnProperty.call
|
1163 |
+
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
1164 |
+
/******/
|
1165 |
+
/******/ // __webpack_public_path__
|
1166 |
+
/******/ __webpack_require__.p = "";
|
1167 |
+
/******/
|
1168 |
+
/******/
|
1169 |
+
/******/ // Load entry module and return exports
|
1170 |
+
/******/ return __webpack_require__(__webpack_require__.s = "./assets/js/src/integration/contactform7.js");
|
1171 |
+
/******/ })
|
1172 |
+
/************************************************************************/
|
1173 |
+
/******/ ({
|
1174 |
+
|
1175 |
+
/***/ "./assets/js/src/integration/contactform7.js":
|
1176 |
+
/*!***************************************************!*\
|
1177 |
+
!*** ./assets/js/src/integration/contactform7.js ***!
|
1178 |
+
\***************************************************/
|
1179 |
+
/*! no exports provided */
|
1180 |
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
1181 |
+
|
1182 |
+
"use strict";
|
1183 |
+
__webpack_require__.r(__webpack_exports__);
|
1184 |
+
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");
|
1185 |
+
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);
|
1186 |
+
|
1187 |
+
|
1188 |
+
/**************************************
|
1189 |
+
* Copyright (c) 2020, Popup Maker
|
1190 |
+
*************************************/
|
1191 |
+
{
|
1192 |
+
var formProvider = "contactform7";
|
1193 |
+
var $ = window.jQuery;
|
1194 |
+
$(document).on("wpcf7mailsent", function (event, details) {
|
1195 |
+
var formId = event.detail.contactFormId,
|
1196 |
+
$form = $(event.target),
|
1197 |
+
// Converts string like wpcf7-f190-p2-o11 and reduces it to simply 11, the last o11 is the instance ID.
|
1198 |
+
// More accurate way of doing it in case things change in the future, this version filters out all but the o param.
|
1199 |
+
// formInstanceId = .split('-').filter((string) => string.indexOf('o') === 0)[0].replace('o','');
|
1200 |
+
// Simpler version that simply splits and pops the last item in the array. This requires it always be the last.
|
1201 |
+
formInstanceId = event.detail.id.split("-").pop().replace("o", ""); // All the magic happens here.
|
1202 |
+
|
1203 |
+
window.PUM.integrations.formSubmission($form, {
|
1204 |
+
formProvider: formProvider,
|
1205 |
+
formId: formId,
|
1206 |
+
formInstanceId: formInstanceId,
|
1207 |
+
extras: {
|
1208 |
+
details: details
|
1209 |
+
}
|
1210 |
+
});
|
1211 |
+
/**
|
1212 |
+
* TODO - Move this to a backward compatiblilty file, hook it into the pum.integration.form.success action.
|
1213 |
+
*
|
1214 |
+
* Listen for older popup actions applied directly to the form.
|
1215 |
+
*
|
1216 |
+
* This is here for backward compatibility with form actions prior to v1.9.
|
1217 |
+
*/
|
1218 |
+
|
1219 |
+
var $settings = $form.find("input.wpcf7-pum"),
|
1220 |
+
settings = $settings.length ? JSON.parse($settings.val()) : false;
|
1221 |
+
|
1222 |
+
if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(settings) === "object" && settings.closedelay !== undefined && settings.closedelay.toString().length >= 3) {
|
1223 |
+
settings.closedelay = settings.closedelay / 1000;
|
1224 |
+
} // Nothing should happen if older action settings not applied
|
1225 |
+
// except triggering of pumFormSuccess event for old cookie method.
|
1226 |
+
|
1227 |
+
|
1228 |
+
window.PUM.forms.success($form, settings);
|
1229 |
+
});
|
1230 |
+
}
|
1231 |
+
|
1232 |
+
/***/ }),
|
1233 |
+
|
1234 |
+
/***/ "./node_modules/@babel/runtime/helpers/typeof.js":
|
1235 |
+
/*!*******************************************************!*\
|
1236 |
+
!*** ./node_modules/@babel/runtime/helpers/typeof.js ***!
|
1237 |
+
\*******************************************************/
|
1238 |
+
/*! no static exports found */
|
1239 |
+
/***/ (function(module, exports) {
|
1240 |
+
|
1241 |
+
function _typeof(obj) {
|
1242 |
+
"@babel/helpers - typeof";
|
1243 |
+
|
1244 |
+
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
|
1245 |
+
module.exports = _typeof = function _typeof(obj) {
|
1246 |
+
return typeof obj;
|
1247 |
+
};
|
1248 |
+
} else {
|
1249 |
+
module.exports = _typeof = function _typeof(obj) {
|
1250 |
+
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
1251 |
+
};
|
1252 |
+
}
|
1253 |
+
|
1254 |
+
return _typeof(obj);
|
1255 |
+
}
|
1256 |
+
|
1257 |
+
module.exports = _typeof;
|
1258 |
+
|
1259 |
+
/***/ })
|
1260 |
+
|
1261 |
+
/******/ });
|
1262 |
+
/******/ (function(modules) { // webpackBootstrap
|
1263 |
+
/******/ // The module cache
|
1264 |
+
/******/ var installedModules = {};
|
1265 |
+
/******/
|
1266 |
+
/******/ // The require function
|
1267 |
+
/******/ function __webpack_require__(moduleId) {
|
1268 |
+
/******/
|
1269 |
+
/******/ // Check if module is in cache
|
1270 |
+
/******/ if(installedModules[moduleId]) {
|
1271 |
+
/******/ return installedModules[moduleId].exports;
|
1272 |
+
/******/ }
|
1273 |
+
/******/ // Create a new module (and put it into the cache)
|
1274 |
+
/******/ var module = installedModules[moduleId] = {
|
1275 |
+
/******/ i: moduleId,
|
1276 |
+
/******/ l: false,
|
1277 |
+
/******/ exports: {}
|
1278 |
+
/******/ };
|
1279 |
+
/******/
|
1280 |
+
/******/ // Execute the module function
|
1281 |
+
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
1282 |
+
/******/
|
1283 |
+
/******/ // Flag the module as loaded
|
1284 |
+
/******/ module.l = true;
|
1285 |
+
/******/
|
1286 |
+
/******/ // Return the exports of the module
|
1287 |
+
/******/ return module.exports;
|
1288 |
+
/******/ }
|
1289 |
+
/******/
|
1290 |
+
/******/
|
1291 |
+
/******/ // expose the modules object (__webpack_modules__)
|
1292 |
+
/******/ __webpack_require__.m = modules;
|
1293 |
+
/******/
|
1294 |
+
/******/ // expose the module cache
|
1295 |
+
/******/ __webpack_require__.c = installedModules;
|
1296 |
+
/******/
|
1297 |
+
/******/ // define getter function for harmony exports
|
1298 |
+
/******/ __webpack_require__.d = function(exports, name, getter) {
|
1299 |
+
/******/ if(!__webpack_require__.o(exports, name)) {
|
1300 |
+
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
1301 |
+
/******/ }
|
1302 |
+
/******/ };
|
1303 |
+
/******/
|
1304 |
+
/******/ // define __esModule on exports
|
1305 |
+
/******/ __webpack_require__.r = function(exports) {
|
1306 |
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
1307 |
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
1308 |
+
/******/ }
|
1309 |
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
1310 |
+
/******/ };
|
1311 |
+
/******/
|
1312 |
+
/******/ // create a fake namespace object
|
1313 |
+
/******/ // mode & 1: value is a module id, require it
|
1314 |
+
/******/ // mode & 2: merge all properties of value into the ns
|
1315 |
+
/******/ // mode & 4: return value when already ns object
|
1316 |
+
/******/ // mode & 8|1: behave like require
|
1317 |
+
/******/ __webpack_require__.t = function(value, mode) {
|
1318 |
+
/******/ if(mode & 1) value = __webpack_require__(value);
|
1319 |
+
/******/ if(mode & 8) return value;
|
1320 |
+
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
1321 |
+
/******/ var ns = Object.create(null);
|
1322 |
+
/******/ __webpack_require__.r(ns);
|
1323 |
+
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
1324 |
+
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
1325 |
+
/******/ return ns;
|
1326 |
+
/******/ };
|
1327 |
+
/******/
|
1328 |
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
1329 |
+
/******/ __webpack_require__.n = function(module) {
|
1330 |
+
/******/ var getter = module && module.__esModule ?
|
1331 |
+
/******/ function getDefault() { return module['default']; } :
|
1332 |
+
/******/ function getModuleExports() { return module; };
|
1333 |
+
/******/ __webpack_require__.d(getter, 'a', getter);
|
1334 |
+
/******/ return getter;
|
1335 |
+
/******/ };
|
1336 |
+
/******/
|
1337 |
+
/******/ // Object.prototype.hasOwnProperty.call
|
1338 |
+
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
1339 |
+
/******/
|
1340 |
+
/******/ // __webpack_public_path__
|
1341 |
+
/******/ __webpack_require__.p = "";
|
1342 |
+
/******/
|
1343 |
+
/******/
|
1344 |
+
/******/ // Load entry module and return exports
|
1345 |
+
/******/ return __webpack_require__(__webpack_require__.s = "./assets/js/src/integration/formidableforms.js");
|
1346 |
+
/******/ })
|
1347 |
+
/************************************************************************/
|
1348 |
+
/******/ ({
|
1349 |
+
|
1350 |
+
/***/ "./assets/js/src/integration/formidableforms.js":
|
1351 |
+
/*!******************************************************!*\
|
1352 |
+
!*** ./assets/js/src/integration/formidableforms.js ***!
|
1353 |
+
\******************************************************/
|
1354 |
+
/*! no static exports found */
|
1355 |
+
/***/ (function(module, exports) {
|
1356 |
+
|
1357 |
+
/***********************************
|
1358 |
+
* Copyright (c) 2020, Popup Maker
|
1359 |
+
**********************************/
|
1360 |
+
{
|
1361 |
+
var formProvider = "formidableforms";
|
1362 |
+
var $ = window.jQuery;
|
1363 |
+
$(document).on("frmFormComplete", function (event, form, response) {
|
1364 |
+
var $form = $(form);
|
1365 |
+
var formId = $form.find('input[name="form_id"]').val();
|
1366 |
+
var $popup = PUM.getPopup($form.find('input[name="pum_form_popup_id"]').val()); // All the magic happens here.
|
1367 |
+
|
1368 |
+
window.PUM.integrations.formSubmission($form, {
|
1369 |
+
popup: $popup,
|
1370 |
+
formProvider: formProvider,
|
1371 |
+
formId: formId,
|
1372 |
+
extras: {
|
1373 |
+
response: response
|
1374 |
+
}
|
1375 |
+
});
|
1376 |
+
});
|
1377 |
+
}
|
1378 |
+
|
1379 |
+
/***/ })
|
1380 |
+
|
1381 |
+
/******/ });
|
1382 |
+
/******/ (function(modules) { // webpackBootstrap
|
1383 |
+
/******/ // The module cache
|
1384 |
+
/******/ var installedModules = {};
|
1385 |
+
/******/
|
1386 |
+
/******/ // The require function
|
1387 |
+
/******/ function __webpack_require__(moduleId) {
|
1388 |
+
/******/
|
1389 |
+
/******/ // Check if module is in cache
|
1390 |
+
/******/ if(installedModules[moduleId]) {
|
1391 |
+
/******/ return installedModules[moduleId].exports;
|
1392 |
+
/******/ }
|
1393 |
+
/******/ // Create a new module (and put it into the cache)
|
1394 |
+
/******/ var module = installedModules[moduleId] = {
|
1395 |
+
/******/ i: moduleId,
|
1396 |
+
/******/ l: false,
|
1397 |
+
/******/ exports: {}
|
1398 |
+
/******/ };
|
1399 |
+
/******/
|
1400 |
+
/******/ // Execute the module function
|
1401 |
+
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
1402 |
+
/******/
|
1403 |
+
/******/ // Flag the module as loaded
|
1404 |
+
/******/ module.l = true;
|
1405 |
+
/******/
|
1406 |
+
/******/ // Return the exports of the module
|
1407 |
+
/******/ return module.exports;
|
1408 |
+
/******/ }
|
1409 |
+
/******/
|
1410 |
+
/******/
|
1411 |
+
/******/ // expose the modules object (__webpack_modules__)
|
1412 |
+
/******/ __webpack_require__.m = modules;
|
1413 |
+
/******/
|
1414 |
+
/******/ // expose the module cache
|
1415 |
+
/******/ __webpack_require__.c = installedModules;
|
1416 |
+
/******/
|
1417 |
+
/******/ // define getter function for harmony exports
|
1418 |
+
/******/ __webpack_require__.d = function(exports, name, getter) {
|
1419 |
+
/******/ if(!__webpack_require__.o(exports, name)) {
|
1420 |
+
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
1421 |
+
/******/ }
|
1422 |
+
/******/ };
|
1423 |
+
/******/
|
1424 |
+
/******/ // define __esModule on exports
|
1425 |
+
/******/ __webpack_require__.r = function(exports) {
|
1426 |
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
1427 |
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
1428 |
+
/******/ }
|
1429 |
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
1430 |
+
/******/ };
|
1431 |
+
/******/
|
1432 |
+
/******/ // create a fake namespace object
|
1433 |
+
/******/ // mode & 1: value is a module id, require it
|
1434 |
+
/******/ // mode & 2: merge all properties of value into the ns
|
1435 |
+
/******/ // mode & 4: return value when already ns object
|
1436 |
+
/******/ // mode & 8|1: behave like require
|
1437 |
+
/******/ __webpack_require__.t = function(value, mode) {
|
1438 |
+
/******/ if(mode & 1) value = __webpack_require__(value);
|
1439 |
+
/******/ if(mode & 8) return value;
|
1440 |
+
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
1441 |
+
/******/ var ns = Object.create(null);
|
1442 |
+
/******/ __webpack_require__.r(ns);
|
1443 |
+
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
1444 |
+
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
1445 |
+
/******/ return ns;
|
1446 |
+
/******/ };
|
1447 |
+
/******/
|
1448 |
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
1449 |
+
/******/ __webpack_require__.n = function(module) {
|
1450 |
+
/******/ var getter = module && module.__esModule ?
|
1451 |
+
/******/ function getDefault() { return module['default']; } :
|
1452 |
+
/******/ function getModuleExports() { return module; };
|
1453 |
+
/******/ __webpack_require__.d(getter, 'a', getter);
|
1454 |
+
/******/ return getter;
|
1455 |
+
/******/ };
|
1456 |
+
/******/
|
1457 |
+
/******/ // Object.prototype.hasOwnProperty.call
|
1458 |
+
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
1459 |
+
/******/
|
1460 |
+
/******/ // __webpack_public_path__
|
1461 |
+
/******/ __webpack_require__.p = "";
|
1462 |
+
/******/
|
1463 |
+
/******/
|
1464 |
+
/******/ // Load entry module and return exports
|
1465 |
+
/******/ return __webpack_require__(__webpack_require__.s = "./assets/js/src/integration/gravityforms.js");
|
1466 |
+
/******/ })
|
1467 |
+
/************************************************************************/
|
1468 |
+
/******/ ({
|
1469 |
+
|
1470 |
+
/***/ "./assets/js/src/integration/gravityforms.js":
|
1471 |
+
/*!***************************************************!*\
|
1472 |
+
!*** ./assets/js/src/integration/gravityforms.js ***!
|
1473 |
+
\***************************************************/
|
1474 |
+
/*! no exports provided */
|
1475 |
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
1476 |
+
|
1477 |
+
"use strict";
|
1478 |
+
__webpack_require__.r(__webpack_exports__);
|
1479 |
+
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");
|
1480 |
+
/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);
|
1481 |
+
|
1482 |
+
|
1483 |
+
/***************************************
|
1484 |
+
* Copyright (c) 2020, Popup Maker
|
1485 |
+
***************************************/
|
1486 |
+
{
|
1487 |
+
var formProvider = "gravityforms";
|
1488 |
+
var $ = window.jQuery;
|
1489 |
+
var gFormSettings = {};
|
1490 |
+
$(document).on("gform_confirmation_loaded", function (event, formId) {
|
1491 |
+
var $form = $("#gform_confirmation_wrapper_" + formId + ",#gforms_confirmation_message_" + formId)[0]; // All the magic happens here.
|
1492 |
+
|
1493 |
+
window.PUM.integrations.formSubmission($form, {
|
1494 |
+
formProvider: formProvider,
|
1495 |
+
formId: formId
|
1496 |
+
});
|
1497 |
+
/**
|
1498 |
+
* TODO - Move this to a backward compatiblilty file, hook it into the pum.integration.form.success action.
|
1499 |
+
*
|
1500 |
+
* Listen for older popup actions applied directly to the form.
|
1501 |
+
*
|
1502 |
+
* This is here for backward compatibility with form actions prior to v1.9.
|
1503 |
+
*/
|
1504 |
+
// Nothing should happen if older action settings not applied
|
1505 |
+
// except triggering of pumFormSuccess event for old cookie method.
|
1506 |
+
|
1507 |
+
window.PUM.forms.success($form, gFormSettings[formId] || {});
|
1508 |
+
})
|
1509 |
+
/**
|
1510 |
+
* TODO - Move this to a backward compatiblilty file, hook it into the pum.integration.form.success action.
|
1511 |
+
*
|
1512 |
+
* Listen for older popup actions applied directly to the form.
|
1513 |
+
*
|
1514 |
+
* This is here for backward compatibility with form actions prior to v1.9.
|
1515 |
+
*/
|
1516 |
+
.ready(function () {
|
1517 |
+
$(".gform_wrapper > form").each(function () {
|
1518 |
+
var $form = $(this),
|
1519 |
+
formId = $form.attr("id").replace("gform_", ""),
|
1520 |
+
$settings = $form.find("input.gforms-pum"),
|
1521 |
+
settings = $settings.length ? JSON.parse($settings.val()) : false;
|
1522 |
+
|
1523 |
+
if (!settings || _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(settings) !== "object") {
|
1524 |
+
return;
|
1525 |
+
}
|
1526 |
+
|
1527 |
+
if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(settings) === "object" && settings.closedelay !== undefined && settings.closedelay.toString().length >= 3) {
|
1528 |
+
settings.closedelay = settings.closedelay / 1000;
|
1529 |
+
}
|
1530 |
+
|
1531 |
+
gFormSettings[formId] = settings;
|
1532 |
+
});
|
1533 |
+
});
|
1534 |
+
}
|
1535 |
+
|
1536 |
+
/***/ }),
|
1537 |
+
|
1538 |
+
/***/ "./node_modules/@babel/runtime/helpers/typeof.js":
|
1539 |
+
/*!*******************************************************!*\
|
1540 |
+
!*** ./node_modules/@babel/runtime/helpers/typeof.js ***!
|
1541 |
+
\*******************************************************/
|
1542 |
+
/*! no static exports found */
|
1543 |
+
/***/ (function(module, exports) {
|
1544 |
+
|
1545 |
+
function _typeof(obj) {
|
1546 |
+
"@babel/helpers - typeof";
|
1547 |
+
|
1548 |
+
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
|
1549 |
+
module.exports = _typeof = function _typeof(obj) {
|
1550 |
+
return typeof obj;
|
1551 |
+
};
|
1552 |
+
} else {
|
1553 |
+
module.exports = _typeof = function _typeof(obj) {
|
1554 |
+
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
1555 |
+
};
|
1556 |
+
}
|
1557 |
+
|
1558 |
+
return _typeof(obj);
|
1559 |
+
}
|
1560 |
+
|
1561 |
+
module.exports = _typeof;
|
1562 |
+
|
1563 |
+
/***/ })
|
1564 |
+
|
1565 |
+
/******/ });
|
1566 |
+
/******/ (function(modules) { // webpackBootstrap
|
1567 |
+
/******/ // The module cache
|
1568 |
+
/******/ var installedModules = {};
|
1569 |
+
/******/
|
1570 |
+
/******/ // The require function
|
1571 |
+
/******/ function __webpack_require__(moduleId) {
|
1572 |
+
/******/
|
1573 |
+
/******/ // Check if module is in cache
|
1574 |
+
/******/ if(installedModules[moduleId]) {
|
1575 |
+
/******/ return installedModules[moduleId].exports;
|
1576 |
+
/******/ }
|
1577 |
+
/******/ // Create a new module (and put it into the cache)
|
1578 |
+
/******/ var module = installedModules[moduleId] = {
|
1579 |
+
/******/ i: moduleId,
|
1580 |
+
/******/ l: false,
|
1581 |
+
/******/ exports: {}
|
1582 |
+
/******/ };
|
1583 |
+
/******/
|
1584 |
+
/******/ // Execute the module function
|
1585 |
+
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
1586 |
+
/******/
|
1587 |
+
/******/ // Flag the module as loaded
|
1588 |
+
/******/ module.l = true;
|
1589 |
+
/******/
|
1590 |
+
/******/ // Return the exports of the module
|
1591 |
+
/******/ return module.exports;
|
1592 |
+
/******/ }
|
1593 |
+
/******/
|
1594 |
+
/******/
|
1595 |
+
/******/ // expose the modules object (__webpack_modules__)
|
1596 |
+
/******/ __webpack_require__.m = modules;
|
1597 |
+
/******/
|
1598 |
+
/******/ // expose the module cache
|
1599 |
+
/******/ __webpack_require__.c = installedModules;
|
1600 |
+
/******/
|
1601 |
+
/******/ // define getter function for harmony exports
|
1602 |
+
/******/ __webpack_require__.d = function(exports, name, getter) {
|
1603 |
+
/******/ if(!__webpack_require__.o(exports, name)) {
|
1604 |
+
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
1605 |
+
/******/ }
|
1606 |
+
/******/ };
|
1607 |
+
/******/
|
1608 |
+
/******/ // define __esModule on exports
|
1609 |
+
/******/ __webpack_require__.r = function(exports) {
|
1610 |
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
1611 |
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
1612 |
+
/******/ }
|
1613 |
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
1614 |
+
/******/ };
|
1615 |
+
/******/
|
1616 |
+
/******/ // create a fake namespace object
|
1617 |
+
/******/ // mode & 1: value is a module id, require it
|
1618 |
+
/******/ // mode & 2: merge all properties of value into the ns
|
1619 |
+
/******/ // mode & 4: return value when already ns object
|
1620 |
+
/******/ // mode & 8|1: behave like require
|
1621 |
+
/******/ __webpack_require__.t = function(value, mode) {
|
1622 |
+
/******/ if(mode & 1) value = __webpack_require__(value);
|
1623 |
+
/******/ if(mode & 8) return value;
|
1624 |
+
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
1625 |
+
/******/ var ns = Object.create(null);
|
1626 |
+
/******/ __webpack_require__.r(ns);
|
1627 |
+
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
1628 |
+
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
1629 |
+
/******/ return ns;
|
1630 |
+
/******/ };
|
1631 |
+
/******/
|
1632 |
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
1633 |
+
/******/ __webpack_require__.n = function(module) {
|
1634 |
+
/******/ var getter = module && module.__esModule ?
|
1635 |
+
/******/ function getDefault() { return module['default']; } :
|
1636 |
+
/******/ function getModuleExports() { return module; };
|
1637 |
+
/******/ __webpack_require__.d(getter, 'a', getter);
|
1638 |
+
/******/ return getter;
|
1639 |
+
/******/ };
|
1640 |
+
/******/
|
1641 |
+
/******/ // Object.prototype.hasOwnProperty.call
|
1642 |
+
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
1643 |
+
/******/
|
1644 |
+
/******/ // __webpack_public_path__
|
1645 |
+
/******/ __webpack_require__.p = "";
|
1646 |
+
/******/
|
1647 |
+
/******/
|
1648 |
+
/******/ // Load entry module and return exports
|
1649 |
+
/******/ return __webpack_require__(__webpack_require__.s = "./assets/js/src/integration/mc4wp.js");
|
1650 |
+
/******/ })
|
1651 |
+
/************************************************************************/
|
1652 |
+
/******/ ({
|
1653 |
+
|
1654 |
+
/***/ "./assets/js/src/integration/mc4wp.js":
|
1655 |
+
/*!********************************************!*\
|
1656 |
+
!*** ./assets/js/src/integration/mc4wp.js ***!
|
1657 |
+
\********************************************/
|
1658 |
+
/*! no static exports found */
|
1659 |
+
/***/ (function(module, exports) {
|
1660 |
+
|
1661 |
+
/*******************************************************************************
|
1662 |
+
* Copyright (c) 2020, WP Popup Maker
|
1663 |
+
******************************************************************************/
|
1664 |
+
{
|
1665 |
+
var formProvider = 'mc4wp';
|
1666 |
+
var $ = window.jQuery;
|
1667 |
+
$(document).ready(function () {
|
1668 |
+
if (typeof mc4wp !== 'undefined') {
|
1669 |
+
mc4wp.forms.on('success', function (form, data) {
|
1670 |
+
var $form = $(form.element),
|
1671 |
+
formId = form.id,
|
1672 |
+
formInstanceId = $('.mc4wp-form-' + form.id).index($form) + 1; // All the magic happens here.
|
1673 |
+
|
1674 |
+
window.PUM.integrations.formSubmission($form, {
|
1675 |
+
formProvider: formProvider,
|
1676 |
+
formId: formId,
|
1677 |
+
formInstanceId: formInstanceId,
|
1678 |
+
extras: {
|
1679 |
+
form: form,
|
1680 |
+
data: data
|
1681 |
+
}
|
1682 |
+
});
|
1683 |
+
});
|
1684 |
+
}
|
1685 |
+
});
|
1686 |
+
}
|
1687 |
+
|
1688 |
+
/***/ })
|
1689 |
+
|
1690 |
+
/******/ });
|
1691 |
+
/******/ (function(modules) { // webpackBootstrap
|
1692 |
+
/******/ // The module cache
|
1693 |
+
/******/ var installedModules = {};
|
1694 |
+
/******/
|
1695 |
+
/******/ // The require function
|
1696 |
+
/******/ function __webpack_require__(moduleId) {
|
1697 |
+
/******/
|
1698 |
+
/******/ // Check if module is in cache
|
1699 |
+
/******/ if(installedModules[moduleId]) {
|
1700 |
+
/******/ return installedModules[moduleId].exports;
|
1701 |
+
/******/ }
|
1702 |
+
/******/ // Create a new module (and put it into the cache)
|
1703 |
+
/******/ var module = installedModules[moduleId] = {
|
1704 |
+
/******/ i: moduleId,
|
1705 |
+
/******/ l: false,
|
1706 |
+
/******/ exports: {}
|
1707 |
+
/******/ };
|
1708 |
+
/******/
|
1709 |
+
/******/ // Execute the module function
|
1710 |
+
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
1711 |
+
/******/
|
1712 |
+
/******/ // Flag the module as loaded
|
1713 |
+
/******/ module.l = true;
|
1714 |
+
/******/
|
1715 |
+
/******/ // Return the exports of the module
|
1716 |
+
/******/ return module.exports;
|
1717 |
+
/******/ }
|
1718 |
+
/******/
|
1719 |
+
/******/
|
1720 |
+
/******/ // expose the modules object (__webpack_modules__)
|
1721 |
+
/******/ __webpack_require__.m = modules;
|
1722 |
+
/******/
|
1723 |
+
/******/ // expose the module cache
|
1724 |
+
/******/ __webpack_require__.c = installedModules;
|
1725 |
+
/******/
|
1726 |
+
/******/ // define getter function for harmony exports
|
1727 |
+
/******/ __webpack_require__.d = function(exports, name, getter) {
|
1728 |
+
/******/ if(!__webpack_require__.o(exports, name)) {
|
1729 |
+
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
1730 |
+
/******/ }
|
1731 |
+
/******/ };
|
1732 |
+
/******/
|
1733 |
+
/******/ // define __esModule on exports
|
1734 |
+
/******/ __webpack_require__.r = function(exports) {
|
1735 |
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
1736 |
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
1737 |
+
/******/ }
|
1738 |
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
1739 |
+
/******/ };
|
1740 |
+
/******/
|
1741 |
+
/******/ // create a fake namespace object
|
1742 |
+
/******/ // mode & 1: value is a module id, require it
|
1743 |
+
/******/ // mode & 2: merge all properties of value into the ns
|
1744 |
+
/******/ // mode & 4: return value when already ns object
|
1745 |
+
/******/ // mode & 8|1: behave like require
|
1746 |
+
/******/ __webpack_require__.t = function(value, mode) {
|
1747 |
+
/******/ if(mode & 1) value = __webpack_require__(value);
|
1748 |
+
/******/ if(mode & 8) return value;
|
1749 |
+
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
1750 |
+
/******/ var ns = Object.create(null);
|
1751 |
+
/******/ __webpack_require__.r(ns);
|
1752 |
+
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
1753 |
+
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
1754 |
+
/******/ return ns;
|
1755 |
+
/******/ };
|
1756 |
+
/******/
|
1757 |
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
1758 |
+
/******/ __webpack_require__.n = function(module) {
|
1759 |
+
/******/ var getter = module && module.__esModule ?
|
1760 |
+
/******/ function getDefault() { return module['default']; } :
|
1761 |
+
/******/ function getModuleExports() { return module; };
|
1762 |
+
/******/ __webpack_require__.d(getter, 'a', getter);
|
1763 |
+
/******/ return getter;
|
1764 |
+
/******/ };
|
1765 |
+
/******/
|
1766 |
+
/******/ // Object.prototype.hasOwnProperty.call
|
1767 |
+
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
1768 |
+
/******/
|
1769 |
+
/******/ // __webpack_public_path__
|
1770 |
+
/******/ __webpack_require__.p = "";
|
1771 |
+
/******/
|
1772 |
+
/******/
|
1773 |
+
/******/ // Load entry module and return exports
|
1774 |
+
/******/ return __webpack_require__(__webpack_require__.s = "./assets/js/src/integration/ninjaforms.js");
|
1775 |
+
/******/ })
|
1776 |
+
/************************************************************************/
|
1777 |
+
/******/ ({
|
1778 |
+
|
1779 |
+
/***/ "./assets/js/src/integration/ninjaforms.js":
|
1780 |
+
/*!*************************************************!*\
|
1781 |
+
!*** ./assets/js/src/integration/ninjaforms.js ***!
|
1782 |
+
\*************************************************/
|
1783 |
+
/*! no exports provided */
|
1784 |
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
1785 |
+
|
1786 |
+
"use strict";
|
1787 |
+
__webpack_require__.r(__webpack_exports__);
|
1788 |
+
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/slicedToArray.js");
|
1789 |
+
/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
|
1790 |
+
|
1791 |
+
|
1792 |
+
/*******************************************************************************
|
1793 |
+
* Copyright (c) 2020, WP Popup Maker
|
1794 |
+
******************************************************************************/
|
1795 |
+
{
|
1796 |
+
var formProvider = 'ninjaforms';
|
1797 |
+
var $ = window.jQuery;
|
1798 |
+
var pumNFController = false;
|
1799 |
+
|
1800 |
+
var initialize_nf_support = function initialize_nf_support() {
|
1801 |
+
/** Ninja Forms Support */
|
1802 |
+
if (typeof Marionette !== 'undefined' && typeof nfRadio !== 'undefined' && false === pumNFController) {
|
1803 |
+
pumNFController = Marionette.Object.extend({
|
1804 |
+
initialize: function initialize() {
|
1805 |
+
this.listenTo(nfRadio.channel('forms'), 'submit:response', this.popupMaker);
|
1806 |
+
},
|
1807 |
+
popupMaker: function popupMaker(response, textStatus, jqXHR, formIdentifier) {
|
1808 |
+
var $form = $('#nf-form-' + formIdentifier + '-cont'),
|
1809 |
+
_formIdentifier$split = formIdentifier.split('_'),
|
1810 |
+
_formIdentifier$split2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_formIdentifier$split, 2),
|
1811 |
+
formId = _formIdentifier$split2[0],
|
1812 |
+
_formIdentifier$split3 = _formIdentifier$split2[1],
|
1813 |
+
formInstanceId = _formIdentifier$split3 === void 0 ? null : _formIdentifier$split3,
|
1814 |
+
settings = {}; // Bail if submission failed.
|
1815 |
+
|
1816 |
+
|
1817 |
+
if (response.errors.length) {
|
1818 |
+
return;
|
1819 |
+
} // All the magic happens here.
|
1820 |
+
|
1821 |
+
|
1822 |
+
window.PUM.integrations.formSubmission($form, {
|
1823 |
+
formProvider: formProvider,
|
1824 |
+
formId: formId,
|
1825 |
+
formInstanceId: formInstanceId,
|
1826 |
+
extras: {
|
1827 |
+
response: response
|
1828 |
+
}
|
1829 |
+
});
|
1830 |
+
/**
|
1831 |
+
* TODO - Move this to a backward compatiblilty file, hook it into the pum.integration.form.success action.
|
1832 |
+
*
|
1833 |
+
* Listen for older popup actions applied directly to the form.
|
1834 |
+
*
|
1835 |
+
* This is here for backward compatibility with form actions prior to v1.9.
|
1836 |
+
*/
|
1837 |
+
|
1838 |
+
if ('undefined' !== typeof response.data.actions) {
|
1839 |
+
settings.openpopup = 'undefined' !== typeof response.data.actions.openpopup;
|
1840 |
+
settings.openpopup_id = settings.openpopup ? parseInt(response.data.actions.openpopup) : 0;
|
1841 |
+
settings.closepopup = 'undefined' !== typeof response.data.actions.closepopup;
|
1842 |
+
settings.closedelay = settings.closepopup ? parseInt(response.data.actions.closepopup) : 0;
|
1843 |
+
|
1844 |
+
if (settings.closepopup && response.data.actions.closedelay) {
|
1845 |
+
settings.closedelay = parseInt(response.data.actions.closedelay);
|
1846 |
+
}
|
1847 |
+
} // Nothing should happen if older action settings not applied
|
1848 |
+
// except triggering of pumFormSuccess event for old cookie method.
|
1849 |
+
|
1850 |
+
|
1851 |
+
window.PUM.forms.success($form, settings);
|
1852 |
+
}
|
1853 |
+
}); // Initialize it.
|
1854 |
+
|
1855 |
+
new pumNFController();
|
1856 |
+
}
|
1857 |
+
};
|
1858 |
+
|
1859 |
+
$(document).ready(initialize_nf_support);
|
1860 |
+
}
|
1861 |
+
|
1862 |
+
/***/ }),
|
1863 |
+
|
1864 |
+
/***/ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js":
|
1865 |
+
/*!*****************************************************************!*\
|
1866 |
+
!*** ./node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***!
|
1867 |
+
\*****************************************************************/
|
1868 |
+
/*! no static exports found */
|
1869 |
+
/***/ (function(module, exports) {
|
1870 |
+
|
1871 |
+
function _arrayLikeToArray(arr, len) {
|
1872 |
+
if (len == null || len > arr.length) len = arr.length;
|
1873 |
+
|
1874 |
+
for (var i = 0, arr2 = new Array(len); i < len; i++) {
|
1875 |
+
arr2[i] = arr[i];
|
1876 |
+
}
|
1877 |
+
|
1878 |
+
return arr2;
|
1879 |
+
}
|
1880 |
+
|
1881 |
+
module.exports = _arrayLikeToArray;
|
1882 |
+
|
1883 |
+
/***/ }),
|
1884 |
+
|
1885 |
+
/***/ "./node_modules/@babel/runtime/helpers/arrayWithHoles.js":
|
1886 |
+
/*!***************************************************************!*\
|
1887 |
+
!*** ./node_modules/@babel/runtime/helpers/arrayWithHoles.js ***!
|
1888 |
+
\***************************************************************/
|
1889 |
+
/*! no static exports found */
|
1890 |
+
/***/ (function(module, exports) {
|
1891 |
+
|
1892 |
+
function _arrayWithHoles(arr) {
|
1893 |
+
if (Array.isArray(arr)) return arr;
|
1894 |
+
}
|
1895 |
+
|
1896 |
+
module.exports = _arrayWithHoles;
|
1897 |
+
|
1898 |
+
/***/ }),
|
1899 |
+
|
1900 |
+
/***/ "./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js":
|
1901 |
+
/*!*********************************************************************!*\
|
1902 |
+
!*** ./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***!
|
1903 |
+
\*********************************************************************/
|
1904 |
+
/*! no static exports found */
|
1905 |
+
/***/ (function(module, exports) {
|
1906 |
+
|
1907 |
+
function _iterableToArrayLimit(arr, i) {
|
1908 |
+
if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
|
1909 |
+
var _arr = [];
|
1910 |
+
var _n = true;
|
1911 |
+
var _d = false;
|
1912 |
+
var _e = undefined;
|
1913 |
+
|
1914 |
+
try {
|
1915 |
+
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
|
1916 |
+
_arr.push(_s.value);
|
1917 |
+
|
1918 |
+
if (i && _arr.length === i) break;
|
1919 |
+
}
|
1920 |
+
} catch (err) {
|
1921 |
+
_d = true;
|
1922 |
+
_e = err;
|
1923 |
+
} finally {
|
1924 |
+
try {
|
1925 |
+
if (!_n && _i["return"] != null) _i["return"]();
|
1926 |
+
} finally {
|
1927 |
+
if (_d) throw _e;
|
1928 |
+
}
|
1929 |
+
}
|
1930 |
+
|
1931 |
+
return _arr;
|
1932 |
+
}
|
1933 |
+
|
1934 |
+
module.exports = _iterableToArrayLimit;
|
1935 |
+
|
1936 |
+
/***/ }),
|
1937 |
+
|
1938 |
+
/***/ "./node_modules/@babel/runtime/helpers/nonIterableRest.js":
|
1939 |
+
/*!****************************************************************!*\
|
1940 |
+
!*** ./node_modules/@babel/runtime/helpers/nonIterableRest.js ***!
|
1941 |
+
\****************************************************************/
|
1942 |
+
/*! no static exports found */
|
1943 |
+
/***/ (function(module, exports) {
|
1944 |
+
|
1945 |
+
function _nonIterableRest() {
|
1946 |
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
1947 |
+
}
|
1948 |
+
|
1949 |
+
module.exports = _nonIterableRest;
|
1950 |
+
|
1951 |
+
/***/ }),
|
1952 |
+
|
1953 |
+
/***/ "./node_modules/@babel/runtime/helpers/slicedToArray.js":
|
1954 |
+
/*!**************************************************************!*\
|
1955 |
+
!*** ./node_modules/@babel/runtime/helpers/slicedToArray.js ***!
|
1956 |
+
\**************************************************************/
|
1957 |
+
/*! no static exports found */
|
1958 |
+
/***/ (function(module, exports, __webpack_require__) {
|
1959 |
+
|
1960 |
+
var arrayWithHoles = __webpack_require__(/*! ./arrayWithHoles */ "./node_modules/@babel/runtime/helpers/arrayWithHoles.js");
|
1961 |
+
|
1962 |
+
var iterableToArrayLimit = __webpack_require__(/*! ./iterableToArrayLimit */ "./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js");
|
1963 |
+
|
1964 |
+
var unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray */ "./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js");
|
1965 |
+
|
1966 |
+
var nonIterableRest = __webpack_require__(/*! ./nonIterableRest */ "./node_modules/@babel/runtime/helpers/nonIterableRest.js");
|
1967 |
+
|
1968 |
+
function _slicedToArray(arr, i) {
|
1969 |
+
return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();
|
1970 |
+
}
|
1971 |
+
|
1972 |
+
module.exports = _slicedToArray;
|
1973 |
+
|
1974 |
+
/***/ }),
|
1975 |
+
|
1976 |
+
/***/ "./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js":
|
1977 |
+
/*!***************************************************************************!*\
|
1978 |
+
!*** ./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***!
|
1979 |
+
\***************************************************************************/
|
1980 |
+
/*! no static exports found */
|
1981 |
+
/***/ (function(module, exports, __webpack_require__) {
|
1982 |
+
|
1983 |
+
var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray */ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js");
|
1984 |
+
|
1985 |
+
function _unsupportedIterableToArray(o, minLen) {
|
1986 |
+
if (!o) return;
|
1987 |
+
if (typeof o === "string") return arrayLikeToArray(o, minLen);
|
1988 |
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
1989 |
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
1990 |
+
if (n === "Map" || n === "Set") return Array.from(o);
|
1991 |
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);
|
1992 |
+
}
|
1993 |
+
|
1994 |
+
module.exports = _unsupportedIterableToArray;
|
1995 |
+
|
1996 |
+
/***/ })
|
1997 |
+
|
1998 |
+
/******/ });
|
1999 |
+
/******/ (function(modules) { // webpackBootstrap
|
2000 |
+
/******/ // The module cache
|
2001 |
+
/******/ var installedModules = {};
|
2002 |
+
/******/
|
2003 |
+
/******/ // The require function
|
2004 |
+
/******/ function __webpack_require__(moduleId) {
|
2005 |
+
/******/
|
2006 |
+
/******/ // Check if module is in cache
|
2007 |
+
/******/ if(installedModules[moduleId]) {
|
2008 |
+
/******/ return installedModules[moduleId].exports;
|
2009 |
+
/******/ }
|
2010 |
+
/******/ // Create a new module (and put it into the cache)
|
2011 |
+
/******/ var module = installedModules[moduleId] = {
|
2012 |
+
/******/ i: moduleId,
|
2013 |
+
/******/ l: false,
|
2014 |
+
/******/ exports: {}
|
2015 |
+
/******/ };
|
2016 |
+
/******/
|
2017 |
+
/******/ // Execute the module function
|
2018 |
+
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
2019 |
+
/******/
|
2020 |
+
/******/ // Flag the module as loaded
|
2021 |
+
/******/ module.l = true;
|
2022 |
+
/******/
|
2023 |
+
/******/ // Return the exports of the module
|
2024 |
+
/******/ return module.exports;
|
2025 |
+
/******/ }
|
2026 |
+
/******/
|
2027 |
+
/******/
|
2028 |
+
/******/ // expose the modules object (__webpack_modules__)
|
2029 |
+
/******/ __webpack_require__.m = modules;
|
2030 |
+
/******/
|
2031 |
+
/******/ // expose the module cache
|
2032 |
+
/******/ __webpack_require__.c = installedModules;
|
2033 |
+
/******/
|
2034 |
+
/******/ // define getter function for harmony exports
|
2035 |
+
/******/ __webpack_require__.d = function(exports, name, getter) {
|
2036 |
+
/******/ if(!__webpack_require__.o(exports, name)) {
|
2037 |
+
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
2038 |
+
/******/ }
|
2039 |
+
/******/ };
|
2040 |
+
/******/
|
2041 |
+
/******/ // define __esModule on exports
|
2042 |
+
/******/ __webpack_require__.r = function(exports) {
|
2043 |
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
2044 |
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
2045 |
+
/******/ }
|
2046 |
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
2047 |
+
/******/ };
|
2048 |
+
/******/
|
2049 |
+
/******/ // create a fake namespace object
|
2050 |
+
/******/ // mode & 1: value is a module id, require it
|
2051 |
+
/******/ // mode & 2: merge all properties of value into the ns
|
2052 |
+
/******/ // mode & 4: return value when already ns object
|
2053 |
+
/******/ // mode & 8|1: behave like require
|
2054 |
+
/******/ __webpack_require__.t = function(value, mode) {
|
2055 |
+
/******/ if(mode & 1) value = __webpack_require__(value);
|
2056 |
+
/******/ if(mode & 8) return value;
|
2057 |
+
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
2058 |
+
/******/ var ns = Object.create(null);
|
2059 |
+
/******/ __webpack_require__.r(ns);
|
2060 |
+
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
2061 |
+
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
2062 |
+
/******/ return ns;
|
2063 |
+
/******/ };
|
2064 |
+
/******/
|
2065 |
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
2066 |
+
/******/ __webpack_require__.n = function(module) {
|
2067 |
+
/******/ var getter = module && module.__esModule ?
|
2068 |
+
/******/ function getDefault() { return module['default']; } :
|
2069 |
+
/******/ function getModuleExports() { return module; };
|
2070 |
+
/******/ __webpack_require__.d(getter, 'a', getter);
|
2071 |
+
/******/ return getter;
|
2072 |
+
/******/ };
|
2073 |
+
/******/
|
2074 |
+
/******/ // Object.prototype.hasOwnProperty.call
|
2075 |
+
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
2076 |
+
/******/
|
2077 |
+
/******/ // __webpack_public_path__
|
2078 |
+
/******/ __webpack_require__.p = "";
|
2079 |
+
/******/
|
2080 |
+
/******/
|
2081 |
+
/******/ // Load entry module and return exports
|
2082 |
+
/******/ return __webpack_require__(__webpack_require__.s = "./assets/js/src/integration/wpforms.js");
|
2083 |
+
/******/ })
|
2084 |
+
/************************************************************************/
|
2085 |
+
/******/ ({
|
2086 |
+
|
2087 |
+
/***/ "./assets/js/src/integration/wpforms.js":
|
2088 |
+
/*!**********************************************!*\
|
2089 |
+
!*** ./assets/js/src/integration/wpforms.js ***!
|
2090 |
+
\**********************************************/
|
2091 |
+
/*! no static exports found */
|
2092 |
+
/***/ (function(module, exports) {
|
2093 |
+
|
2094 |
+
/*******************************************************************************
|
2095 |
+
* Copyright (c) 2020, WP Popup Maker
|
2096 |
+
******************************************************************************/
|
2097 |
+
{
|
2098 |
+
var formProvider = 'wpforms';
|
2099 |
+
var $ = window.jQuery;
|
2100 |
+
$(document).on('wpformsAjaxSubmitSuccess', '.wpforms-ajax-form', function (event, details) {
|
2101 |
+
var $form = $(this),
|
2102 |
+
formId = $form.data('formid'),
|
2103 |
+
formInstanceId = $('form#' + $form.attr('id')).index($form) + 1; // All the magic happens here.
|
2104 |
+
|
2105 |
+
window.PUM.integrations.formSubmission($form, {
|
2106 |
+
formProvider: formProvider,
|
2107 |
+
formId: formId,
|
2108 |
+
formInstanceId: formInstanceId
|
2109 |
+
});
|
2110 |
+
});
|
2111 |
+
}
|
2112 |
+
|
2113 |
+
/***/ })
|
2114 |
+
|
2115 |
+
/******/ });
|
2116 |
/**
|
2117 |
* Initialize Popup Maker.
|
2118 |
* Version 1.8
|
2317 |
*/
|
2318 |
|
2319 |
var PUM_Analytics;
|
2320 |
+
(function($) {
|
2321 |
+
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2322 |
|
2323 |
+
$.fn.popmake.last_open_trigger = null;
|
2324 |
+
$.fn.popmake.last_close_trigger = null;
|
2325 |
+
$.fn.popmake.conversion_trigger = null;
|
2326 |
+
|
2327 |
+
var rest_enabled = !!(
|
2328 |
+
typeof pum_vars.analytics_api !== "undefined" && pum_vars.analytics_api
|
2329 |
+
);
|
2330 |
+
|
2331 |
+
PUM_Analytics = {
|
2332 |
+
beacon: function(data, callback) {
|
2333 |
+
var beacon = new Image(),
|
2334 |
+
url = rest_enabled ? pum_vars.analytics_api : pum_vars.ajaxurl,
|
2335 |
+
opts = {
|
2336 |
+
route: pum.hooks.applyFilters(
|
2337 |
+
"pum.analyticsBeaconRoute",
|
2338 |
+
"/" + pum_vars.analytics_route + "/"
|
2339 |
+
),
|
2340 |
+
data: pum.hooks.applyFilters(
|
2341 |
+
"pum.AnalyticsBeaconData",
|
2342 |
+
$.extend(
|
2343 |
+
true,
|
2344 |
+
{
|
2345 |
+
event: "open",
|
2346 |
+
pid: null,
|
2347 |
+
_cache: +new Date()
|
2348 |
+
},
|
2349 |
+
data
|
2350 |
+
)
|
2351 |
+
),
|
2352 |
+
callback:
|
2353 |
+
typeof callback === "function"
|
2354 |
+
? callback
|
2355 |
+
: function() {}
|
2356 |
+
};
|
2357 |
+
|
2358 |
+
if (!rest_enabled) {
|
2359 |
+
opts.data.action = "pum_analytics";
|
2360 |
+
} else {
|
2361 |
+
url += opts.route;
|
2362 |
+
}
|
2363 |
|
2364 |
+
// Create a beacon if a url is provided
|
2365 |
+
if (url) {
|
2366 |
+
// Attach the event handlers to the image object
|
2367 |
+
$(beacon).on("error success load done", opts.callback);
|
|
|
2368 |
|
2369 |
+
// Attach the src for the script call
|
2370 |
+
beacon.src = url + "?" + $.param(opts.data);
|
2371 |
+
}
|
2372 |
+
}
|
2373 |
+
};
|
2374 |
+
|
2375 |
+
if (
|
2376 |
+
typeof pum_vars.disable_tracking === "undefined" ||
|
2377 |
+
!pum_vars.disable_tracking
|
2378 |
+
) {
|
2379 |
+
// Only popups from the editor should fire analytics events.
|
2380 |
+
$(document)
|
2381 |
+
/**
|
2382 |
+
* Track opens for popups.
|
2383 |
+
*/
|
2384 |
+
.on("pumAfterOpen.core_analytics", ".pum", function() {
|
2385 |
+
var $popup = PUM.getPopup(this),
|
2386 |
+
data = {
|
2387 |
+
pid:
|
2388 |
+
parseInt($popup.popmake("getSettings").id, 10) ||
|
2389 |
+
null
|
2390 |
+
};
|
2391 |
+
|
2392 |
+
// Shortcode popups use negative numbers, and single-popup (preview mode) shouldn't be tracked.
|
2393 |
+
if (data.pid > 0 && !$("body").hasClass("single-popup")) {
|
2394 |
+
PUM_Analytics.beacon(data);
|
2395 |
+
}
|
2396 |
+
});
|
2397 |
+
/**
|
2398 |
+
* Track form submission conversions
|
2399 |
+
*/
|
2400 |
+
$(function() {
|
2401 |
+
PUM.hooks.addAction("pum.integration.form.success", function(
|
2402 |
+
form,
|
2403 |
+
args
|
2404 |
+
) {
|
2405 |
+
// If the submission has already been counted in the backend, we can bail early.
|
2406 |
+
if (args.ajax === false) {
|
2407 |
+
return;
|
2408 |
+
}
|
2409 |
|
2410 |
+
// If no popup is included in the args, we can bail early since we only record conversions within popups.
|
2411 |
+
if (args.popup.length === 0) {
|
2412 |
+
return;
|
2413 |
+
}
|
2414 |
+
var data = {
|
2415 |
+
pid:
|
2416 |
+
parseInt(args.popup.popmake("getSettings").id, 10) ||
|
2417 |
+
null,
|
2418 |
+
event: "conversion"
|
2419 |
+
};
|
2420 |
+
|
2421 |
+
// Shortcode popups use negative numbers, and single-popup (preview mode) shouldn't be tracked.
|
2422 |
+
if (data.pid > 0 && !$("body").hasClass("single-popup")) {
|
2423 |
+
PUM_Analytics.beacon(data);
|
2424 |
+
}
|
2425 |
+
});
|
2426 |
+
});
|
2427 |
+
}
|
2428 |
+
})(jQuery);
|
2429 |
+
|
2430 |
/**
|
2431 |
* Defines the core $.popmake animations.
|
2432 |
* Version 1.4
|
3035 |
pm_remove_cookie = $.pm_remove_cookie = $.fn.popmake.cookie.remove;
|
3036 |
|
3037 |
}(jQuery));
|
3038 |
+
(function($, document, undefined) {
|
3039 |
+
"use strict";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3040 |
|
3041 |
+
var setCookie = function(settings) {
|
3042 |
+
$.pm_cookie(
|
3043 |
+
settings.name,
|
3044 |
+
true,
|
3045 |
+
settings.session ? null : settings.time,
|
3046 |
+
settings.path ? pum_vars.home_url || "/" : null
|
3047 |
+
);
|
3048 |
+
pum.hooks.doAction("popmake.setCookie", settings);
|
3049 |
+
};
|
3050 |
+
|
3051 |
+
$.extend($.fn.popmake.methods, {
|
3052 |
+
addCookie: function(type) {
|
3053 |
+
// Method calling logic
|
3054 |
+
|
3055 |
+
pum.hooks.doAction("popmake.addCookie", arguments);
|
3056 |
+
|
3057 |
+
if ($.fn.popmake.cookies[type]) {
|
3058 |
+
return $.fn.popmake.cookies[type].apply(
|
3059 |
+
this,
|
3060 |
+
Array.prototype.slice.call(arguments, 1)
|
3061 |
+
);
|
3062 |
+
}
|
3063 |
+
if (window.console) {
|
3064 |
+
console.warn("Cookie type " + type + " does not exist.");
|
3065 |
+
}
|
3066 |
+
return this;
|
3067 |
+
},
|
3068 |
+
setCookie: setCookie,
|
3069 |
+
checkCookies: function(settings) {
|
3070 |
+
var i,
|
3071 |
+
ret = false;
|
3072 |
+
|
3073 |
+
if (
|
3074 |
+
settings.cookie_name === undefined ||
|
3075 |
+
settings.cookie_name === null ||
|
3076 |
+
settings.cookie_name === ""
|
3077 |
+
) {
|
3078 |
+
return false;
|
3079 |
+
}
|
3080 |
|
3081 |
+
switch (typeof settings.cookie_name) {
|
3082 |
+
case "object":
|
3083 |
+
case "array":
|
3084 |
+
for (i = 0; settings.cookie_name.length > i; i += 1) {
|
3085 |
+
if (
|
3086 |
+
$.pm_cookie(settings.cookie_name[i]) !== undefined
|
3087 |
+
) {
|
3088 |
+
ret = true;
|
3089 |
+
}
|
3090 |
+
}
|
3091 |
+
break;
|
3092 |
+
case "string":
|
3093 |
+
if ($.pm_cookie(settings.cookie_name) !== undefined) {
|
3094 |
+
ret = true;
|
3095 |
+
}
|
3096 |
+
break;
|
3097 |
+
}
|
3098 |
|
3099 |
+
pum.hooks.doAction("popmake.checkCookies", settings, ret);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3100 |
|
3101 |
+
return ret;
|
3102 |
+
}
|
3103 |
+
});
|
|
|
3104 |
|
3105 |
+
$.fn.popmake.cookies = $.fn.popmake.cookies || {};
|
|
|
|
|
|
|
3106 |
|
3107 |
+
$.extend($.fn.popmake.cookies, {
|
3108 |
+
on_popup_open: function(settings) {
|
3109 |
+
var $popup = PUM.getPopup(this);
|
3110 |
+
$popup.on("pumAfterOpen", function() {
|
3111 |
+
$popup.popmake("setCookie", settings);
|
3112 |
+
});
|
3113 |
+
},
|
3114 |
+
on_popup_close: function(settings) {
|
3115 |
+
var $popup = PUM.getPopup(this);
|
3116 |
+
$popup.on("pumBeforeClose", function() {
|
3117 |
+
$popup.popmake("setCookie", settings);
|
3118 |
+
});
|
3119 |
+
},
|
3120 |
+
form_submission: function(settings) {
|
3121 |
+
var $popup = PUM.getPopup(this);
|
3122 |
|
3123 |
+
settings = $.extend(
|
3124 |
+
{
|
3125 |
+
form: "",
|
3126 |
+
formInstanceId: "",
|
3127 |
+
only_in_popup: false
|
3128 |
+
},
|
3129 |
+
settings
|
3130 |
+
);
|
3131 |
+
|
3132 |
+
PUM.hooks.addAction("pum.integration.form.success", function(
|
3133 |
+
form,
|
3134 |
+
args
|
3135 |
+
) {
|
3136 |
+
if (!settings.form.length) {
|
3137 |
+
return;
|
3138 |
+
}
|
3139 |
|
3140 |
+
if (
|
3141 |
+
PUM.integrations.checkFormKeyMatches(
|
3142 |
+
settings.form,
|
3143 |
+
settings.formInstanceId,
|
3144 |
+
args
|
3145 |
+
)
|
3146 |
+
) {
|
3147 |
+
if (
|
3148 |
+
(settings.only_in_popup &&
|
3149 |
+
args.popup.length &&
|
3150 |
+
args.popup.is($popup)) ||
|
3151 |
+
!settings.only_in_popup
|
3152 |
+
) {
|
3153 |
+
$popup.popmake("setCookie", settings);
|
3154 |
+
}
|
3155 |
+
}
|
3156 |
+
});
|
3157 |
+
},
|
3158 |
+
manual: function(settings) {
|
3159 |
+
var $popup = PUM.getPopup(this);
|
3160 |
+
$popup.on("pumSetCookie", function() {
|
3161 |
+
$popup.popmake("setCookie", settings);
|
3162 |
+
});
|
3163 |
+
},
|
3164 |
+
form_success: function(settings) {
|
3165 |
+
var $popup = PUM.getPopup(this);
|
3166 |
+
$popup.on("pumFormSuccess", function() {
|
3167 |
+
$popup.popmake("setCookie", settings);
|
3168 |
+
});
|
3169 |
+
},
|
3170 |
+
pum_sub_form_success: function(settings) {
|
3171 |
+
var $popup = PUM.getPopup(this);
|
3172 |
+
$popup.find("form.pum-sub-form").on("success", function() {
|
3173 |
+
$popup.popmake("setCookie", settings);
|
3174 |
+
});
|
3175 |
+
},
|
3176 |
+
/**
|
3177 |
+
* @deprecated 1.7.0
|
3178 |
+
*
|
3179 |
+
* @param settings
|
3180 |
+
*/
|
3181 |
+
pum_sub_form_already_subscribed: function(settings) {
|
3182 |
+
var $popup = PUM.getPopup(this);
|
3183 |
+
$popup.find("form.pum-sub-form").on("success", function() {
|
3184 |
+
$popup.popmake("setCookie", settings);
|
3185 |
+
});
|
3186 |
+
},
|
3187 |
+
ninja_form_success: function(settings) {
|
3188 |
+
return $.fn.popmake.cookies.form_success.apply(this, arguments);
|
3189 |
+
},
|
3190 |
+
cf7_form_success: function(settings) {
|
3191 |
+
return $.fn.popmake.cookies.form_success.apply(this, arguments);
|
3192 |
+
},
|
3193 |
+
gforms_form_success: function(settings) {
|
3194 |
+
return $.fn.popmake.cookies.form_success.apply(this, arguments);
|
3195 |
+
}
|
3196 |
+
});
|
3197 |
|
3198 |
+
// Register All Cookies for a Popup
|
3199 |
+
$(document)
|
3200 |
+
.ready(function() {
|
3201 |
+
var $cookies = $(".pum-cookie");
|
3202 |
+
|
3203 |
+
$cookies.each(function() {
|
3204 |
+
var $cookie = $(this),
|
3205 |
+
index = $cookies.index($cookie),
|
3206 |
+
args = $cookie.data("cookie-args");
|
3207 |
+
|
3208 |
+
// If only-onscreen not set or false, set the cookie immediately.
|
3209 |
+
if (!$cookie.data("only-onscreen")) {
|
3210 |
+
setCookie(args);
|
3211 |
+
} else {
|
3212 |
+
// If the element is visible on page load, set the cookie.
|
3213 |
+
if ($cookie.isInViewport() && $cookie.is(":visible")) {
|
3214 |
+
setCookie(args);
|
3215 |
+
} else {
|
3216 |
+
// Add a throttled scroll listener, when its in view, set the cookie.
|
3217 |
+
$(window).on(
|
3218 |
+
"scroll.pum-cookie-" + index,
|
3219 |
+
$.fn.popmake.utilities.throttle(function(event) {
|
3220 |
+
if (
|
3221 |
+
$cookie.isInViewport() &&
|
3222 |
+
$cookie.is(":visible")
|
3223 |
+
) {
|
3224 |
+
setCookie(args);
|
3225 |
+
|
3226 |
+
$(window).off("scroll.pum-cookie-" + index);
|
3227 |
+
}
|
3228 |
+
}, 100)
|
3229 |
+
);
|
3230 |
+
}
|
3231 |
+
}
|
3232 |
+
});
|
3233 |
+
})
|
3234 |
+
.on("pumInit", ".pum", function() {
|
3235 |
+
var $popup = PUM.getPopup(this),
|
3236 |
+
settings = $popup.popmake("getSettings"),
|
3237 |
+
cookies = settings.cookies || [],
|
3238 |
+
cookie = null,
|
3239 |
+
i;
|
3240 |
+
|
3241 |
+
if (cookies.length) {
|
3242 |
+
for (i = 0; cookies.length > i; i += 1) {
|
3243 |
+
cookie = cookies[i];
|
3244 |
+
$popup.popmake("addCookie", cookie.event, cookie.settings);
|
3245 |
+
}
|
3246 |
+
}
|
3247 |
+
});
|
3248 |
+
})(jQuery, document);
|
3249 |
|
3250 |
var pum_debug_mode = false,
|
3251 |
pum_debug;
|
assets/js/site.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
var PUM,PUM_Accessibility,PUM_Analytics,pm_cookie,pm_cookie_json,pm_remove_cookie;!function(s){"use strict";void 0===s.fn.on&&(s.fn.on=function(e,o,t){return this.delegate(o,e,t)}),void 0===s.fn.off&&(s.fn.off=function(e,o,t){return this.undelegate(o,e,t)}),void 0===s.fn.bindFirst&&(s.fn.bindFirst=function(e,o){var t,n,i=s(this);i.unbind(e,o),i.bind(e,o),(n=(t=s._data(i[0]).events)[e]).unshift(n.pop()),t[e]=n}),void 0===s.fn.outerHtml&&(s.fn.outerHtml=function(){var e=s(this).clone();return s("<div/>").append(e).html()}),void 0===s.fn.isInViewport&&(s.fn.isInViewport=function(){var e=s(this).offset().top,o=e+s(this).outerHeight(),t=s(window).scrollTop(),n=t+s(window).height();return t<o&&e<n}),void 0===Date.now&&(Date.now=function(){return(new Date).getTime()})}(jQuery),function(p,s,r){"use strict";function i(e,o){function t(e,o,t){return o?e[o.slice(0,t?-1:o.length)]:e}return o.split(".").reduce(function(e,o){return o?o.split("[").reduce(t,e):e},e)}window.pum_vars=window.pum_vars||{default_theme:"0",home_url:"/",version:1.7,pm_dir_url:"",ajaxurl:"",restapi:!1,rest_nonce:null,debug_mode:!1,disable_tracking:!0,message_position:"top",core_sub_forms_enabled:!0,popups:{}},window.pum_popups=window.pum_popups||{},window.pum_vars.popups=window.pum_popups,PUM={get:new function(){function e(e,o,t){"boolean"==typeof o&&(t=o,o=!1);var n=o?o.selector+" "+e:e;return r!==i[n]&&!t||(i[n]=o?o.find(e):jQuery(e)),i[n]}var i={};return e.elementCache=i,e},getPopup:function(e){var o,t;return t=e,(o=isNaN(t)||parseInt(Number(t))!==parseInt(t)||isNaN(parseInt(t,10))?"current"===e?PUM.get(".pum-overlay.pum-active:eq(0)",!0):"open"===e?PUM.get(".pum-overlay.pum-active",!0):"closed"===e?PUM.get(".pum-overlay:not(.pum-active)",!0):e instanceof jQuery?e:p(e):PUM.get("#pum-"+e)).hasClass("pum-overlay")?o:o.hasClass("popmake")||o.parents(".pum-overlay").length?o.parents(".pum-overlay"):p()},open:function(e,o){PUM.getPopup(e).popmake("open",o)},close:function(e,o){PUM.getPopup(e).popmake("close",o)},preventOpen:function(e){PUM.getPopup(e).addClass("preventOpen")},getSettings:function(e){return PUM.getPopup(e).popmake("getSettings")},getSetting:function(e,o,t){var n=i(PUM.getSettings(e),o);return void 0!==n?n:t!==r?t:null},checkConditions:function(e){return PUM.getPopup(e).popmake("checkConditions")},getCookie:function(e){return p.pm_cookie(e)},getJSONCookie:function(e){return p.pm_cookie_json(e)},setCookie:function(e,o){PUM.getPopup(e).popmake("setCookie",jQuery.extend({name:"pum-"+PUM.getSetting(e,"id"),expires:"+30 days"},o))},clearCookie:function(e,o){p.pm_remove_cookie(e),"function"==typeof o&&o()},clearCookies:function(e,o){var t,n=PUM.getPopup(e).popmake("getSettings").cookies;if(n!==r&&n.length)for(t=0;n.length>t;t+=1)p.pm_remove_cookie(n[t].settings.name);"function"==typeof o&&o()},getClickTriggerSelector:function(e,o){var t=PUM.getPopup(e),n=PUM.getSettings(e),i=[".popmake-"+n.id,".popmake-"+decodeURIComponent(n.slug),'a[href$="#popmake-'+n.id+'"]'];return o.extra_selectors&&""!==o.extra_selectors&&i.push(o.extra_selectors),(i=pum.hooks.applyFilters("pum.trigger.click_open.selectors",i,o,t)).join(", ")},disableClickTriggers:function(e,o){if(e!==r)if(o!==r){var t=PUM.getClickTriggerSelector(e,o);p(t).removeClass("pum-trigger"),p(s).off("click.pumTrigger click.popmakeOpen",t)}else{var n=PUM.getSetting(e,"triggers",[]);if(n.length)for(var i=0;n.length>i;i++){-1!==pum.hooks.applyFilters("pum.disableClickTriggers.clickTriggerTypes",["click_open"]).indexOf(n[i].type)&&(t=PUM.getClickTriggerSelector(e,n[i].settings),p(t).removeClass("pum-trigger"),p(s).off("click.pumTrigger click.popmakeOpen",t))}}}},p.fn.popmake=function(e){return p.fn.popmake.methods[e]?(p(s).trigger("pumMethodCall",arguments),p.fn.popmake.methods[e].apply(this,Array.prototype.slice.call(arguments,1))):"object"!=typeof e&&e?void(window.console&&console.warn("Method "+e+" does not exist on $.fn.popmake")):p.fn.popmake.methods.init.apply(this,arguments)},p.fn.popmake.methods={init:function(){return this.each(function(){var e,o=PUM.getPopup(this),t=o.popmake("getSettings");return t.theme_id<=0&&(t.theme_id=pum_vars.default_theme),t.disable_reposition!==r&&t.disable_reposition||p(window).on("resize",function(){(o.hasClass("pum-active")||o.find(".popmake.active").length)&&p.fn.popmake.utilities.throttle(setTimeout(function(){o.popmake("reposition")},25),500,!1)}),o.find(".pum-container").data("popmake",t),o.data("popmake",t).trigger("pumInit"),t.open_sound&&"none"!==t.open_sound&&((e="custom"!==t.open_sound?new Audio(pum_vars.pm_dir_url+"/assets/sounds/"+t.open_sound):new Audio(t.custom_sound)).addEventListener("canplaythrough",function(){o.data("popAudio",e)}),e.addEventListener("error",function(){console.warn("Error occurred when trying to load Popup opening sound.")}),e.load()),this})},getOverlay:function(){return PUM.getPopup(this)},getContainer:function(){return PUM.getPopup(this).find(".pum-container")},getTitle:function(){return PUM.getPopup(this).find(".pum-title")||null},getContent:function(){return PUM.getPopup(this).find(".pum-content")||null},getClose:function(){return PUM.getPopup(this).find(".pum-content + .pum-close")||null},getSettings:function(){var e=PUM.getPopup(this);return p.extend(!0,{},p.fn.popmake.defaults,e.data("popmake")||{},"object"==typeof pum_popups&&void 0!==pum_popups[e.attr("id")]?pum_popups[e.attr("id")]:{})},state:function(e){var o=PUM.getPopup(this);if(r!==e)switch(e){case"isOpen":return o.hasClass("pum-open")||o.popmake("getContainer").hasClass("active");case"isClosed":return!o.hasClass("pum-open")&&!o.popmake("getContainer").hasClass("active")}},open:function(e){var o=PUM.getPopup(this),t=o.popmake("getContainer"),n=o.popmake("getClose"),i=o.popmake("getSettings"),s=p("html");return o.trigger("pumBeforeOpen"),o.hasClass("preventOpen")||t.hasClass("preventOpen")?(console.log("prevented"),o.removeClass("preventOpen").removeClass("pum-active").trigger("pumOpenPrevented")):(i.stackable||o.popmake("close_all"),o.addClass("pum-active"),0<i.close_button_delay&&n.fadeOut(0),s.addClass("pum-open"),i.overlay_disabled?s.addClass("pum-open-overlay-disabled"):s.addClass("pum-open-overlay"),i.position_fixed?s.addClass("pum-open-fixed"):s.addClass("pum-open-scrollable"),o.popmake("setup_close").popmake("reposition").popmake("animate",i.animation_type,function(){0<i.close_button_delay&&setTimeout(function(){n.fadeIn()},i.close_button_delay),o.trigger("pumAfterOpen"),p(window).trigger("resize"),p.fn.popmake.last_open_popup=o,e!==r&&e()}),void 0!==o.data("popAudio")&&o.data("popAudio").play().catch(function(e){console.warn("Sound was not able to play when popup opened. Reason: "+e)})),this},setup_close:function(){var t=PUM.getPopup(this),e=t.popmake("getClose"),n=t.popmake("getSettings");return(e=e.add(p(".popmake-close, .pum-close",t).not(e))).off("click.pum").on("click.pum",function(e){var o=p(this);o.hasClass("pum-do-default")||o.data("do-default")!==r&&o.data("do-default")||e.preventDefault(),p.fn.popmake.last_close_trigger="Close Button",t.popmake("close")}),(n.close_on_esc_press||n.close_on_f4_press)&&p(window).off("keyup.popmake").on("keyup.popmake",function(e){27===e.keyCode&&n.close_on_esc_press&&(p.fn.popmake.last_close_trigger="ESC Key",t.popmake("close")),115===e.keyCode&&n.close_on_f4_press&&(p.fn.popmake.last_close_trigger="F4 Key",t.popmake("close"))}),n.close_on_overlay_click&&(t.on("pumAfterOpen",function(){p(s).on("click.pumCloseOverlay",function(e){p(e.target).closest(".pum-container").length||(p.fn.popmake.last_close_trigger="Overlay Click",t.popmake("close"))})}),t.on("pumAfterClose",function(){p(s).off("click.pumCloseOverlay")})),n.close_on_form_submission&&PUM.hooks.addAction("pum.integration.form.success",function(e,o){o.popup&&o.popup[0]===t[0]&&setTimeout(function(){p.fn.popmake.last_close_trigger="Form Submission",t.popmake("close")},n.close_on_form_submission_delay||0)}),t.trigger("pumSetupClose"),this},close:function(n){return this.each(function(){var e=PUM.getPopup(this),o=e.popmake("getContainer"),t=(t=e.popmake("getClose")).add(p(".popmake-close, .pum-close",e).not(t));return e.trigger("pumBeforeClose"),e.hasClass("preventClose")||o.hasClass("preventClose")?e.removeClass("preventClose").trigger("pumClosePrevented"):o.fadeOut("fast",function(){e.is(":visible")&&e.fadeOut("fast"),p(window).off("keyup.popmake"),e.off("click.popmake"),t.off("click.popmake"),1===p(".pum-active").length&&p("html").removeClass("pum-open").removeClass("pum-open-scrollable").removeClass("pum-open-overlay").removeClass("pum-open-overlay-disabled").removeClass("pum-open-fixed"),e.removeClass("pum-active").trigger("pumAfterClose"),o.find("iframe").filter('[src*="youtube"],[src*="vimeo"]').each(function(){var e=p(this),o=e.attr("src"),t=o.replace("autoplay=1","1=1");t!==o&&(o=t),e.prop("src",o)}),o.find("video").each(function(){this.pause()}),n!==r&&n()}),this})},close_all:function(){return p(".pum-active").popmake("close"),this},reposition:function(e){var o=PUM.getPopup(this).trigger("pumBeforeReposition"),t=o.popmake("getContainer"),n=o.popmake("getSettings"),i=n.location,s={my:"",at:"",of:window,collision:"none",using:"function"==typeof e?e:p.fn.popmake.callbacks.reposition_using},r={overlay:null,container:null},a=null;try{a=p(p.fn.popmake.last_open_trigger)}catch(e){a=p()}return n.position_from_trigger&&a.length?(s.of=a,0<=i.indexOf("left")&&(s.my+=" right",s.at+=" left"+(0!==n.position_left?"-"+n.position_left:"")),0<=i.indexOf("right")&&(s.my+=" left",s.at+=" right"+(0!==n.position_right?"+"+n.position_right:"")),0<=i.indexOf("center")&&(s.my="center"===i?"center":s.my+" center",s.at="center"===i?"center":s.at+" center"),0<=i.indexOf("top")&&(s.my+=" bottom",s.at+=" top"+(0!==n.position_top?"-"+n.position_top:"")),0<=i.indexOf("bottom")&&(s.my+=" top",s.at+=" bottom"+(0!==n.position_bottom?"+"+n.position_bottom:""))):(0<=i.indexOf("left")&&(s.my+=" left"+(0!==n.position_left?"+"+n.position_left:""),s.at+=" left"),0<=i.indexOf("right")&&(s.my+=" right"+(0!==n.position_right?"-"+n.position_right:""),s.at+=" right"),0<=i.indexOf("center")&&(s.my="center"===i?"center":s.my+" center",s.at="center"===i?"center":s.at+" center"),0<=i.indexOf("top")&&(s.my+=" top"+(0!==n.position_top?"+"+(p("body").hasClass("admin-bar")?parseInt(n.position_top,10)+32:n.position_top):""),s.at+=" top"),0<=i.indexOf("bottom")&&(s.my+=" bottom"+(0!==n.position_bottom?"-"+n.position_bottom:""),s.at+=" bottom")),s.my=p.trim(s.my),s.at=p.trim(s.at),o.is(":hidden")&&(r.overlay=o.css("opacity"),o.css({opacity:0}).show(0)),t.is(":hidden")&&(r.container=t.css("opacity"),t.css({opacity:0}).show(0)),n.position_fixed&&t.addClass("fixed"),"custom"===n.size?t.css({width:n.custom_width,height:n.custom_height_auto?"auto":n.custom_height}):"auto"!==n.size&&t.addClass("responsive").css({minWidth:""!==n.responsive_min_width?n.responsive_min_width:"auto",maxWidth:""!==n.responsive_max_width?n.responsive_max_width:"auto"}),o.trigger("pumAfterReposition"),t.addClass("custom-position").position(s).trigger("popmakeAfterReposition"),"center"===i&&t[0].offsetTop<0&&t.css({top:p("body").hasClass("admin-bar")?42:10}),r.overlay&&o.css({opacity:r.overlay}).hide(0),r.container&&t.css({opacity:r.container}).hide(0),this},animation_origin:function(e){var o=PUM.getPopup(this).popmake("getContainer"),t={my:"",at:""};switch(e){case"top":t={my:"left+"+o.offset().left+" bottom-100",at:"left top"};break;case"bottom":t={my:"left+"+o.offset().left+" top+100",at:"left bottom"};break;case"left":t={my:"right top+"+o.offset().top,at:"left top"};break;case"right":t={my:"left top+"+o.offset().top,at:"right top"};break;default:0<=e.indexOf("left")&&(t={my:t.my+" right",at:t.at+" left"}),0<=e.indexOf("right")&&(t={my:t.my+" left",at:t.at+" right"}),0<=e.indexOf("center")&&(t={my:t.my+" center",at:t.at+" center"}),0<=e.indexOf("top")&&(t={my:t.my+" bottom-100",at:t.at+" top"}),0<=e.indexOf("bottom")&&(t={my:t.my+" top+100",at:t.at+" bottom"}),t.my=p.trim(t.my),t.at=p.trim(t.at)}return t.of=window,t.collision="none",t}}}(jQuery,document),function(e){"use strict";e.fn.popmake.version=1.8,e.fn.popmake.last_open_popup=null,window.PUM.init=function(){console.log("init popups ✔"),e(".pum").popmake(),e(void 0).trigger("pumInitialized"),"object"==typeof pum_vars.form_success&&(pum_vars.form_success=e.extend({popup_id:null,settings:{}}),PUM.forms.success(pum_vars.form_success.popup_id,pum_vars.form_success.settings)),PUM.integrations.init()},e(void 0).ready(function(){var e=PUM.hooks.applyFilters("pum.initHandler",PUM.init),o=PUM.hooks.applyFilters("pum.initPromises",[]);Promise.all(o).then(e)}),e(".pum").on("pumInit",function(){var e=PUM.getPopup(this),o=PUM.getSetting(e,"id"),t=e.find("form");t.length&&t.append('<input type="hidden" name="pum_form_popup_id" value="'+o+'" />')})}(jQuery),function(s,t){"use strict";var n,i,r,a="a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]",e=".pum:not(.pum-accessibility-disabled)";PUM_Accessibility={forceFocus:function(e){r&&r.length&&!r[0].contains(e.target)&&(e.stopPropagation(),PUM_Accessibility.setFocusToFirstItem())},trapTabKey:function(e){var o,t,n,i;9===e.keyCode&&(o=r.find(".pum-container *").filter(a).filter(":visible"),t=s(":focus"),n=o.length,i=o.index(t),e.shiftKey?0===i&&(o.get(n-1).focus(),e.preventDefault()):i===n-1&&(o.get(0).focus(),e.preventDefault()))},setFocusToFirstItem:function(){r.find(".pum-container *").filter(a).filter(":visible").filter(":not(.pum-close)").first().focus()}},s(t).on("pumInit",e,function(){PUM.getPopup(this).find("[tabindex]").each(function(){var e=s(this);e.data("tabindex",e.attr("tabindex")).prop("tabindex","0")})}).on("pumBeforeOpen",e,function(){var e=PUM.getPopup(this),o=s(":focus");e.has(o).length||(i=o),r=e.on("keydown.pum_accessibility",PUM_Accessibility.trapTabKey).attr("aria-hidden","false"),(n=s("body > *").filter(":visible").not(r)).attr("aria-hidden","true"),s(t).one("focusin.pum_accessibility",PUM_Accessibility.forceFocus),PUM_Accessibility.setFocusToFirstItem()}).on("pumAfterOpen",e,function(){}).on("pumBeforeClose",e,function(){}).on("pumAfterClose",e,function(){PUM.getPopup(this).off("keydown.pum_accessibility").attr("aria-hidden","true"),n&&(n.attr("aria-hidden","false"),n=null),void 0!==i&&i.length&&i.focus(),r=null,s(t).off("focusin.pum_accessibility")}).on("pumSetupClose",e,function(){}).on("pumOpenPrevented",e,function(){}).on("pumClosePrevented",e,function(){}).on("pumBeforeReposition",e,function(){})}(jQuery,document),function(s){"use strict";s.fn.popmake.last_open_trigger=null,s.fn.popmake.last_close_trigger=null,s.fn.popmake.conversion_trigger=null;var r=!(void 0===pum_vars.restapi||!pum_vars.restapi);PUM_Analytics={beacon:function(e,o){var t=new Image,n=r?pum_vars.restapi:pum_vars.ajaxurl,i={route:pum.hooks.applyFilters("pum.analyticsBeaconRoute","/analytics/"),data:pum.hooks.applyFilters("pum.AnalyticsBeaconData",s.extend(!0,{event:"open",pid:null,_cache:+new Date},e)),callback:"function"==typeof o?o:function(){}};r?n+=i.route:i.data.action="pum_analytics",n&&(s(t).on("error success load done",i.callback),t.src=n+"?"+s.param(i.data))}},void 0!==pum_vars.disable_tracking&&pum_vars.disable_tracking||s(document).on("pumAfterOpen.core_analytics",".pum",function(){var e=PUM.getPopup(this),o={pid:parseInt(e.popmake("getSettings").id,10)||null};0<o.pid&&!s("body").hasClass("single-popup")&&PUM_Analytics.beacon(o)})}(jQuery),function(n,s){"use strict";function r(e){var o=e.popmake("getContainer"),t={display:"",opacity:""};e.css(t),o.css(t)}function a(e){return e.overlay_disabled?0:e.animation_speed/2}function p(e){return e.overlay_disabled?parseInt(e.animation_speed):e.animation_speed/2}n.fn.popmake.methods.animate_overlay=function(e,o,t){return PUM.getPopup(this).popmake("getSettings").overlay_disabled?n.fn.popmake.overlay_animations.none.apply(this,[o,t]):n.fn.popmake.overlay_animations[e]?n.fn.popmake.overlay_animations[e].apply(this,[o,t]):(window.console&&console.warn("Animation style "+e+" does not exist."),this)},n.fn.popmake.methods.animate=function(e){return n.fn.popmake.animations[e]?n.fn.popmake.animations[e].apply(this,Array.prototype.slice.call(arguments,1)):(window.console&&console.warn("Animation style "+e+" does not exist."),this)},n.fn.popmake.animations={none:function(e){var o=PUM.getPopup(this);return o.popmake("getContainer").css({opacity:1,display:"block"}),o.popmake("animate_overlay","none",0,function(){e!==s&&e()}),this},slide:function(o){var e=PUM.getPopup(this),t=e.popmake("getContainer"),n=e.popmake("getSettings"),i=e.popmake("animation_origin",n.animation_origin);return r(e),t.position(i),e.popmake("animate_overlay","fade",a(n),function(){t.popmake("reposition",function(e){t.animate(e,p(n),"swing",function(){o!==s&&o()})})}),this},fade:function(e){var o=PUM.getPopup(this),t=o.popmake("getContainer"),n=o.popmake("getSettings");return r(o),o.css({opacity:0,display:"block"}),t.css({opacity:0,display:"block"}),o.popmake("animate_overlay","fade",a(n),function(){t.animate({opacity:1},p(n),"swing",function(){e!==s&&e()})}),this},fadeAndSlide:function(o){var e=PUM.getPopup(this),t=e.popmake("getContainer"),n=e.popmake("getSettings"),i=e.popmake("animation_origin",n.animation_origin);return r(e),e.css({display:"block",opacity:0}),t.css({display:"block",opacity:0}),t.position(i),e.popmake("animate_overlay","fade",a(n),function(){t.popmake("reposition",function(e){e.opacity=1,t.animate(e,p(n),"swing",function(){o!==s&&o()})})}),this},grow:function(e){return n.fn.popmake.animations.fade.apply(this,arguments)},growAndSlide:function(e){return n.fn.popmake.animations.fadeAndSlide.apply(this,arguments)}},n.fn.popmake.overlay_animations={none:function(e,o){PUM.getPopup(this).css({opacity:1,display:"block"}),"function"==typeof o&&o()},fade:function(e,o){PUM.getPopup(this).css({opacity:0,display:"block"}).animate({opacity:1},e,"swing",o)},slide:function(e,o){PUM.getPopup(this).slideDown(e,o)}}}(jQuery,void document),function(e,o){"use strict";e(o).on("pumInit",".pum",function(){e(this).popmake("getContainer").trigger("popmakeInit")}).on("pumBeforeOpen",".pum",function(){e(this).popmake("getContainer").addClass("active").trigger("popmakeBeforeOpen")}).on("pumAfterOpen",".pum",function(){e(this).popmake("getContainer").trigger("popmakeAfterOpen")}).on("pumBeforeClose",".pum",function(){e(this).popmake("getContainer").trigger("popmakeBeforeClose")}).on("pumAfterClose",".pum",function(){e(this).popmake("getContainer").removeClass("active").trigger("popmakeAfterClose")}).on("pumSetupClose",".pum",function(){e(this).popmake("getContainer").trigger("popmakeSetupClose")}).on("pumOpenPrevented",".pum",function(){e(this).popmake("getContainer").removeClass("preventOpen").removeClass("active")}).on("pumClosePrevented",".pum",function(){e(this).popmake("getContainer").removeClass("preventClose")}).on("pumBeforeReposition",".pum",function(){e(this).popmake("getContainer").trigger("popmakeBeforeReposition")})}(jQuery,document),function(o){"use strict";o.fn.popmake.callbacks={reposition_using:function(e){o(this).css(e)}}}(jQuery,document),function(p){"use strict";function u(){return void 0===e&&(e="undefined"!=typeof MobileDetect?new MobileDetect(window.navigator.userAgent):{phone:function(){return!1},tablet:function(){return!1}}),e}var e;p.extend(p.fn.popmake.methods,{checkConditions:function(){var e,o,t,n,i,s=PUM.getPopup(this),r=s.popmake("getSettings"),a=!0;if(r.disable_on_mobile&&u().phone())return!1;if(r.disable_on_tablet&&u().tablet())return!1;if(r.conditions.length)for(o=0;r.conditions.length>o;o++){for(n=r.conditions[o],e=!1,t=0;n.length>t&&((!(i=p.extend({},{not_operand:!1},n[t])).not_operand&&s.popmake("checkCondition",i)||i.not_operand&&!s.popmake("checkCondition",i))&&(e=!0),p(this).trigger("pumCheckingCondition",[e,i]),!e);t++);e||(a=!1)}return a},checkCondition:function(e){var o=e.target||null;e.settings;return o?p.fn.popmake.conditions[o]?p.fn.popmake.conditions[o].apply(this,[e]):window.console?(console.warn("Condition "+o+" does not exist."),!0):void 0:(console.warn("Condition type not set."),!1)}}),p.fn.popmake.conditions={}}(jQuery,document),function(c){"use strict";function m(e,o,t){var n,i=new Date;if("undefined"!=typeof document){if(1<arguments.length){switch(typeof(t=c.extend({path:pum_vars.home_url},m.defaults,t)).expires){case"number":i.setMilliseconds(i.getMilliseconds()+864e5*t.expires),t.expires=i;break;case"string":i.setTime(1e3*c.fn.popmake.utilities.strtotime("+"+t.expires)),t.expires=i}try{n=JSON.stringify(o),/^[\{\[]/.test(n)&&(o=n)}catch(e){}return o=d.write?d.write(o,e):encodeURIComponent(String(o)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=(e=(e=encodeURIComponent(String(e))).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent)).replace(/[\(\)]/g,escape),document.cookie=[e,"=",o,t.expires?"; expires="+t.expires.toUTCString():"",t.path?"; path="+t.path:"",t.domain?"; domain="+t.domain:"",t.secure?"; secure":""].join("")}e||(n={});for(var s=document.cookie?document.cookie.split("; "):[],r=/(%[0-9A-Z]{2})+/g,a=0;a<s.length;a++){var p=s[a].split("=");'"'===(l=p.slice(1).join("=")).charAt(0)&&(l=l.slice(1,-1));try{var u=p[0].replace(r,decodeURIComponent),l=d.read?d.read(l,u):d(l,u)||l.replace(r,decodeURIComponent);if(this.json)try{l=JSON.parse(l)}catch(e){}if(e===u){n=l;break}e||(n[u]=l)}catch(e){}}return n}}var d;c.extend(c.fn.popmake,{cookie:(void 0===d&&(d=function(){}),(m.set=m).get=function(e){return m.call(m,e)},m.getJSON=function(){return m.apply({json:!0},[].slice.call(arguments))},m.defaults={},m.remove=function(e,o){m(e,"",c.extend({},o,{expires:-1,path:""})),m(e,"",c.extend({},o,{expires:-1}))},m.process=function(e,o,t,n){return m.apply(m,3<arguments.length&&"object"!=typeof t&&void 0!==o?[e,o,{expires:t,path:n}]:[].slice.call(arguments,[0,2]))},m.withConverter=c.fn.popmake.cookie,m)}),pm_cookie=c.pm_cookie=c.fn.popmake.cookie.process,pm_cookie_json=c.pm_cookie_json=c.fn.popmake.cookie.getJSON,pm_remove_cookie=c.pm_remove_cookie=c.fn.popmake.cookie.remove}(jQuery),function(i,e,n){"use strict";function s(e){i.pm_cookie(e.name,!0,e.session?null:e.time,e.path?pum_vars.home_url||"/":null),pum.hooks.doAction("popmake.setCookie",e)}i.extend(i.fn.popmake.methods,{addCookie:function(e){return pum.hooks.doAction("popmake.addCookie",arguments),i.fn.popmake.cookies[e]?i.fn.popmake.cookies[e].apply(this,Array.prototype.slice.call(arguments,1)):(window.console&&console.warn("Cookie type "+e+" does not exist."),this)},setCookie:s,checkCookies:function(e){var o,t=!1;if(e.cookie_name===n||null===e.cookie_name||""===e.cookie_name)return!1;switch(typeof e.cookie_name){case"object":case"array":for(o=0;e.cookie_name.length>o;o+=1)i.pm_cookie(e.cookie_name[o])!==n&&(t=!0);break;case"string":i.pm_cookie(e.cookie_name)!==n&&(t=!0)}return pum.hooks.doAction("popmake.checkCookies",e,t),t}}),i.fn.popmake.cookies=i.fn.popmake.cookies||{},i.extend(i.fn.popmake.cookies,{on_popup_open:function(e){var o=PUM.getPopup(this);o.on("pumAfterOpen",function(){o.popmake("setCookie",e)})},on_popup_close:function(e){var o=PUM.getPopup(this);o.on("pumBeforeClose",function(){o.popmake("setCookie",e)})},form_submission:function(t){var n=PUM.getPopup(this);t=i.extend({form:"",formInstanceId:"",only_in_popup:!1},t),PUM.hooks.addAction("pum.integration.form.success",function(e,o){t.form.length&&PUM.integrations.checkFormKeyMatches(t.form,t.formInstanceId,o)&&(t.only_in_popup&&PUM.getPopup(e).length&&PUM.getPopup(e).is(n)||!t.only_in_popup)&&n.popmake("setCookie",t)})},manual:function(e){var o=PUM.getPopup(this);o.on("pumSetCookie",function(){o.popmake("setCookie",e)})},form_success:function(e){var o=PUM.getPopup(this);o.on("pumFormSuccess",function(){o.popmake("setCookie",e)})},pum_sub_form_success:function(e){var o=PUM.getPopup(this);o.find("form.pum-sub-form").on("success",function(){o.popmake("setCookie",e)})},pum_sub_form_already_subscribed:function(e){var o=PUM.getPopup(this);o.find("form.pum-sub-form").on("success",function(){o.popmake("setCookie",e)})},ninja_form_success:function(e){return i.fn.popmake.cookies.form_success.apply(this,arguments)},cf7_form_success:function(e){return i.fn.popmake.cookies.form_success.apply(this,arguments)},gforms_form_success:function(e){return i.fn.popmake.cookies.form_success.apply(this,arguments)}}),i(e).ready(function(){var e=i(".pum-cookie");e.each(function(){var o=i(this),t=e.index(o),n=o.data("cookie-args");!o.data("only-onscreen")||o.isInViewport()&&o.is(":visible")?s(n):i(window).on("scroll.pum-cookie-"+t,i.fn.popmake.utilities.throttle(function(e){o.isInViewport()&&o.is(":visible")&&(s(n),i(window).off("scroll.pum-cookie-"+t))},100))})}).on("pumInit",".pum",function(){var e,o=PUM.getPopup(this),t=o.popmake("getSettings").cookies||[],n=null;if(t.length)for(e=0;e<t.length;e+=1)n=t[e],o.popmake("addCookie",n.event,n.settings)})}(jQuery,document);var pum_debug,pum_debug_mode=!1;!function(r,e){var a,t,p;e=window.pum_vars||{debug_mode:!1},(pum_debug_mode=void 0!==e.debug_mode&&e.debug_mode)||-1===window.location.href.indexOf("pum_debug")||(pum_debug_mode=!0),pum_debug_mode&&(t=a=!1,p=window.pum_debug_vars||{debug_mode_enabled:"Popup Maker: Debug Mode Enabled",debug_started_at:"Debug started at:",debug_more_info:"For more information on how to use this information visit https://docs.wppopupmaker.com/?utm_medium=js-debug-info&utm_campaign=ContextualHelp&utm_source=browser-console&utm_content=more-info",global_info:"Global Information",localized_vars:"Localized variables",popups_initializing:"Popups Initializing",popups_initialized:"Popups Initialized",single_popup_label:"Popup: #",theme_id:"Theme ID: ",label_method_call:"Method Call:",label_method_args:"Method Arguments:",label_popup_settings:"Settings",label_triggers:"Triggers",label_cookies:"Cookies",label_delay:"Delay:",label_conditions:"Conditions",label_cookie:"Cookie:",label_settings:"Settings:",label_selector:"Selector:",label_mobile_disabled:"Mobile Disabled:",label_tablet_disabled:"Tablet Disabled:",label_event:"Event: %s",triggers:[],cookies:[]},pum_debug={odump:function(e){return r.extend({},e)},logo:function(){console.log(" -------------------------------------------------------------\n| ____ __ __ _ |\n| | _ \\ ___ _ __ _ _ _ __ | \\/ | __ _| | _____ _ __ |\n| | |_) / _ \\| '_ \\| | | | '_ \\ | |\\/| |/ _` | |/ / _ \\ '__| |\n| | __/ (_) | |_) | |_| | |_) | | | | | (_| | < __/ | |\n| |_| \\___/| .__/ \\__,_| .__/ |_| |_|\\__,_|_|\\_\\___|_| |\n| |_| |_| |\n -------------------------------------------------------------")},initialize:function(){a=!0,pum_debug.logo(),console.debug(p.debug_mode_enabled),console.log(p.debug_started_at,new Date),console.info(p.debug_more_info),pum_debug.divider(p.global_info),console.groupCollapsed(p.localized_vars),console.log("pum_vars:",pum_debug.odump(e)),r(document).trigger("pum_debug_initialize_localized_vars"),console.groupEnd(),r(document).trigger("pum_debug_initialize")},popup_event_header:function(e){var o=e.popmake("getSettings");t!==o.id&&(t=o.id,pum_debug.divider(p.single_popup_label+o.id+" - "+o.slug))},divider:function(e){var o=62,t=0,n=" "+new Array(63).join("-")+" ";"string"==typeof e?(o=62-e.length,(t={left:Math.floor(o/2),right:Math.floor(o/2)}).left+t.right===o-1&&t.right++,t.left=new Array(t.left+1).join(" "),t.right=new Array(t.right+1).join(" "),console.log(n+"\n|"+t.left+e+t.right+"|\n"+n)):console.log(n)},click_trigger:function(e,o){var t,n=e.popmake("getSettings"),i=[".popmake-"+n.id,".popmake-"+decodeURIComponent(n.slug),'a[href$="#popmake-'+n.id+'"]'];o.extra_selectors&&""!==o.extra_selectors&&i.push(o.extra_selectors),t=(i=pum.hooks.applyFilters("pum.trigger.click_open.selectors",i,o,e)).join(", "),console.log(p.label_selector,t)},trigger:function(e,o){if("string"==typeof p.triggers[o.type]){switch(console.groupCollapsed(p.triggers[o.type]),o.type){case"auto_open":console.log(p.label_delay,o.settings.delay),console.log(p.label_cookie,o.settings.cookie_name);break;case"click_open":pum_debug.click_trigger(e,o.settings),console.log(p.label_cookie,o.settings.cookie_name)}r(document).trigger("pum_debug_render_trigger",e,o),console.groupEnd()}},cookie:function(e,o){if("string"==typeof p.cookies[o.event]){switch(console.groupCollapsed(p.cookies[o.event]),o.event){case"on_popup_open":case"on_popup_close":case"manual":case"ninja_form_success":console.log(p.label_cookie,pum_debug.odump(o.settings))}r(document).trigger("pum_debug_render_trigger",e,o),console.groupEnd()}}},r(document).on("pumInit",".pum",function(){var e=PUM.getPopup(r(this)),o=e.popmake("getSettings"),t=o.triggers||[],n=o.cookies||[],i=o.conditions||[],s=0;if(a||(pum_debug.initialize(),pum_debug.divider(p.popups_initializing)),console.groupCollapsed(p.single_popup_label+o.id+" - "+o.slug),console.log(p.theme_id,o.theme_id),t.length){for(console.groupCollapsed(p.label_triggers),s=0;s<t.length;s++)pum_debug.trigger(e,t[s]);console.groupEnd()}if(n.length){for(console.groupCollapsed(p.label_cookies),s=0;s<n.length;s+=1)pum_debug.cookie(e,n[s]);console.groupEnd()}i.length&&(console.groupCollapsed(p.label_conditions),console.log(i),console.groupEnd()),console.groupCollapsed(p.label_popup_settings),console.log(p.label_mobile_disabled,!1!==o.disable_on_mobile),console.log(p.label_tablet_disabled,!1!==o.disable_on_tablet),console.log(p.label_display_settings,pum_debug.odump(o)),e.trigger("pum_debug_popup_settings"),console.groupEnd(),console.groupEnd()}).on("pumBeforeOpen",".pum",function(){var e=PUM.getPopup(r(this)),o=r.fn.popmake.last_open_trigger;pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumBeforeOpen"));try{o=(o=r(r.fn.popmake.last_open_trigger)).length?o:r.fn.popmake.last_open_trigger.toString()}catch(e){o=""}finally{console.log(p.label_triggers,[o])}console.groupEnd()}).on("pumOpenPrevented",".pum",function(){var e=PUM.getPopup(r(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumOpenPrevented")),console.groupEnd()}).on("pumAfterOpen",".pum",function(){var e=PUM.getPopup(r(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumAfterOpen")),console.groupEnd()}).on("pumSetupClose",".pum",function(){var e=PUM.getPopup(r(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumSetupClose")),console.groupEnd()}).on("pumClosePrevented",".pum",function(){var e=PUM.getPopup(r(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumClosePrevented")),console.groupEnd()}).on("pumBeforeClose",".pum",function(){var e=PUM.getPopup(r(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumBeforeClose")),console.groupEnd()}).on("pumAfterClose",".pum",function(){var e=PUM.getPopup(r(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumAfterClose")),console.groupEnd()}).on("pumBeforeReposition",".pum",function(){var e=PUM.getPopup(r(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumBeforeReposition")),console.groupEnd()}).on("pumAfterReposition",".pum",function(){var e=PUM.getPopup(r(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumAfterReposition")),console.groupEnd()}).on("pumCheckingCondition",".pum",function(e,o,t){var n=PUM.getPopup(r(this));pum_debug.popup_event_header(n),console.groupCollapsed(p.label_event.replace("%s","pumCheckingCondition")),console.log((t.not_operand?"(!) ":"")+t.target+": "+o,t),console.groupEnd()}))}(jQuery),function(e){"use strict";e.fn.popmake.defaults={id:null,slug:"",theme_id:null,cookies:[],triggers:[],conditions:[],mobile_disabled:null,tablet_disabled:null,custom_height_auto:!1,scrollable_content:!1,position_from_trigger:!1,position_fixed:!1,overlay_disabled:!1,stackable:!1,disable_reposition:!1,close_on_overlay_click:!1,close_on_form_submission:!1,close_on_form_submission_delay:0,close_on_esc_press:!1,close_on_f4_press:!1,disable_on_mobile:!1,disable_on_tablet:!1,size:"medium",responsive_min_width:"0%",responsive_max_width:"100%",custom_width:"640px",custom_height:"380px",animation_type:"fade",animation_speed:"350",animation_origin:"center top",location:"center top",position_top:"100",position_bottom:"0",position_left:"0",position_right:"0",zindex:"1999999999",close_button_delay:"0",meta:{display:{stackable:!1,overlay_disabled:!1,size:"medium",responsive_max_width:"100",responsive_max_width_unit:"%",responsive_min_width:"0",responsive_min_width_unit:"%",custom_width:"640",custom_width_unit:"px",custom_height:"380",custom_height_unit:"px",custom_height_auto:!1,location:"center top",position_top:100,position_left:0,position_bottom:0,position_right:0,position_fixed:!1,animation_type:"fade",animation_speed:350,animation_origin:"center top",scrollable_content:!1,disable_reposition:!1,position_from_trigger:!1,overlay_zindex:!1,zindex:"1999999999"},close:{overlay_click:!1,esc_press:!1,f4_press:!1,text:"",button_delay:0},click_open:[]},container:{active_class:"active",attr:{class:"popmake"}},title:{attr:{class:"popmake-title"}},content:{attr:{class:"popmake-content"}},close:{close_speed:0,attr:{class:"popmake-close"}},overlay:{attr:{id:"popmake-overlay",class:"popmake-overlay"}}}}(jQuery,document),function(s){"use strict";var r={openpopup:!1,openpopup_id:0,closepopup:!1,closedelay:0,redirect_enabled:!1,redirect:"",cookie:!1};window.PUM=window.PUM||{},window.PUM.forms=window.PUM.forms||{},s.extend(window.PUM.forms,{form:{validation:{errors:[]},responseHandler:function(e,o){var t=o.data;o.success?window.PUM.forms.form.success(e,t):window.PUM.forms.form.errors(e,t)},display_errors:function(e,o){window.PUM.forms.messages.add(e,o||this.validation.errors,"error")},beforeAjax:function(e){var o=e.find('[type="submit"]'),t=o.find(".pum-form__loader");window.PUM.forms.messages.clear_all(e),t.length||(t=s('<span class="pum-form__loader"></span>'),""!==o.attr("value")?t.insertAfter(o):o.append(t)),o.prop("disabled",!0),t.show(),e.addClass("pum-form--loading").removeClass("pum-form--errors")},afterAjax:function(e){var o=e.find('[type="submit"]'),t=o.find(".pum-form__loader");o.prop("disabled",!1),t.hide(),e.removeClass("pum-form--loading")},success:function(e,o){void 0!==o.message&&""!==o.message&&window.PUM.forms.messages.add(e,[{message:o.message}]),e.trigger("success",[o]),!e.data("noredirect")&&void 0!==e.data("redirect_enabled")&&o.redirect&&(""!==o.redirect?window.location=o.redirect:window.location.reload(!0))},errors:function(e,o){void 0!==o.errors&&o.errors.length&&(console.log(o.errors),window.PUM.forms.form.display_errors(e,o.errors),window.PUM.forms.messages.scroll_to_first(e),e.addClass("pum-form--errors").trigger("errors",[o]))},submit:function(e){var o=s(this),t=o.pumSerializeObject();e.preventDefault(),e.stopPropagation(),window.PUM.forms.form.beforeAjax(o),s.ajax({type:"POST",dataType:"json",url:pum_vars.ajaxurl,data:{action:"pum_form",values:t}}).always(function(){window.PUM.forms.form.afterAjax(o)}).done(function(e){window.PUM.forms.form.responseHandler(o,e)}).error(function(e,o,t){console.log("Error: type of "+o+" with message of "+t)})}},messages:{add:function(e,o,t){var n=e.find(".pum-form__messages"),i=0;if(t=t||"success",o=o||[],!n.length)switch(n=s('<div class="pum-form__messages">').hide(),pum_vars.message_position){case"bottom":e.append(n.addClass("pum-form__messages--bottom"));break;case"top":e.prepend(n.addClass("pum-form__messages--top"))}if(0<=["bottom","top"].indexOf(pum_vars.message_position))for(;o.length>i;i++)this.add_message(n,o[i].message,t);else for(;o.length>i;i++)void 0!==o[i].field?this.add_field_error(e,o[i]):this.add_message(n,o[i].message,t);n.is(":hidden")&&s(".pum-form__message",n).length&&n.slideDown()},add_message:function(e,o,t){var n=s('<p class="pum-form__message">').html(o);t=t||"success",n.addClass("pum-form__message--"+t),e.append(n),e.is(":visible")&&n.hide().slideDown()},add_field_error:function(e,o){var t=s('[name="'+o.field+'"]',e).parents(".pum-form__field").addClass("pum-form__field--error");this.add_message(t,o.message,"error")},clear_all:function(e,o){var t=e.find(".pum-form__messages"),n=t.find(".pum-form__message"),i=e.find(".pum-form__field.pum-form__field--error");o=o||!1,t.length&&n.slideUp("fast",function(){s(this).remove(),o&&t.hide()}),i.length&&i.removeClass("pum-form__field--error").find("p.pum-form__message").remove()},scroll_to_first:function(e){window.PUM.utilities.scrollTo(s(".pum-form__field.pum-form__field--error",e).eq(0))}},success:function(e,o){var t,n,i;(o=s.extend({},r,o))&&(t=PUM.getPopup(e),n={},i=function(){o.openpopup&&PUM.getPopup(o.openpopup_id).length?PUM.open(o.openpopup_id):o.redirect_enabled&&(""!==o.redirect?window.location=o.redirect:window.location.reload(!0))},t.length&&(t.trigger("pumFormSuccess"),o.cookie&&(n=s.extend({name:"pum-"+PUM.getSetting(t,"id"),expires:"+1 year"},"object"==typeof o.cookie?o.cookie:{}),PUM.setCookie(t,n))),t.length&&o.closepopup?setTimeout(function(){t.popmake("close",i)},1e3*parseInt(o.closedelay)):i())}})}(jQuery),function(e){"use strict";e.pum=e.pum||{},e.pum.hooks=e.pum.hooks||new function(){var t=Array.prototype.slice,i={removeFilter:function(e,o){"string"==typeof e&&n("filters",e,o);return i},applyFilters:function(){var e=t.call(arguments),o=e.shift();return"string"!=typeof o?i:r("filters",o,e)},addFilter:function(e,o,t,n){"string"==typeof e&&"function"==typeof o&&(t=parseInt(t||10,10),s("filters",e,o,t,n));return i},removeAction:function(e,o){"string"==typeof e&&n("actions",e,o);return i},doAction:function(){var e=t.call(arguments),o=e.shift();"string"==typeof o&&r("actions",o,e);return i},addAction:function(e,o,t,n){"string"==typeof e&&"function"==typeof o&&(t=parseInt(t||10,10),s("actions",e,o,t,n));return i}},a={actions:{},filters:{}};function n(e,o,t,n){var i,s,r;if(a[e][o])if(t)if(i=a[e][o],n)for(r=i.length;r--;)(s=i[r]).callback===t&&s.context===n&&i.splice(r,1);else for(r=i.length;r--;)i[r].callback===t&&i.splice(r,1);else a[e][o]=[]}function s(e,o,t,n,i){var s={callback:t,priority:n,context:i},r=(r=a[e][o])?(r.push(s),function(e){for(var o,t,n,i=1,s=e.length;i<s;i++){for(o=e[i],t=i;(n=e[t-1])&&n.priority>o.priority;)e[t]=e[t-1],--t;e[t]=o}return e}(r)):[s];a[e][o]=r}function r(e,o,t){var n,i,s=a[e][o];if(!s)return"filters"===e&&t[0];if(i=s.length,"filters"===e)for(n=0;n<i;n++)t[0]=s[n].callback.apply(s[n].context,t);else for(n=0;n<i;n++)s[n].callback.apply(s[n].context,t);return"filters"!==e||t[0]}return i},e.PUM=e.PUM||{},e.PUM.hooks=e.pum.hooks}(window),function(t){"use strict";function n(e){return e}window.PUM=window.PUM||{},window.PUM.integrations=window.PUM.integrations||{},t.extend(window.PUM.integrations,{init:function(){var e;void 0!==pum_vars.form_submission&&((e=pum_vars.form_submission).ajax=!1,e.popup=0<e.popupId?PUM.getPopup(e.popupId):null,PUM.integrations.formSubmission(null,e))},formSubmission:function(e,o){(o=t.extend({popup:PUM.getPopup(e),formProvider:null,formId:null,formInstanceId:null,formKey:null,ajax:!0,tracked:!1},o)).formKey=o.formKey||[o.formProvider,o.formId,o.formInstanceId].filter(n).join("_"),o.popup&&o.popup.length&&(o.popupId=PUM.getSetting(o.popup,"id")),window.PUM.hooks.doAction("pum.integration.form.success",e,o)},checkFormKeyMatches:function(e,o,t){o=""===o&&o;var n=-1!==["any"===e,"pumsubform"===e&&"pumsubform"===t.formProvider,e===t.formProvider+"_any",!o&&new RegExp("^"+e+"(_[d]*)?").test(t.formKey),!!o&&e+"_"+o===t.formKey].indexOf(!0);return window.PUM.hooks.applyFilters("pum.integration.checkFormKeyMatches",n,{formIdentifier:e,formInstanceId:o,submittedFormArgs:t})}})}(window.jQuery),function(p){"use strict";pum_vars&&void 0!==pum_vars.core_sub_forms_enabled&&!pum_vars.core_sub_forms_enabled||(window.PUM=window.PUM||{},window.PUM.newsletter=window.PUM.newsletter||{},p.extend(window.PUM.newsletter,{form:p.extend({},window.PUM.forms.form,{submit:function(e){var o=p(this),t=o.pumSerializeObject();e.preventDefault(),e.stopPropagation(),window.PUM.newsletter.form.beforeAjax(o),p.ajax({type:"POST",dataType:"json",url:pum_vars.ajaxurl,data:{action:"pum_sub_form",values:t}}).always(function(){window.PUM.newsletter.form.afterAjax(o)}).done(function(e){window.PUM.newsletter.form.responseHandler(o,e)}).error(function(e,o,t){console.log("Error: type of "+o+" with message of "+t)})}})}),p(document).on("submit","form.pum-sub-form",window.PUM.newsletter.form.submit).on("success","form.pum-sub-form",function(e,o){var t=p(e.target),n=t.data("settings")||{},i=t.pumSerializeObject(),s=PUM.getPopup(t),r=PUM.getSetting(s,"id"),a=p("form.pum-sub-form",s).index(t)+1;window.PUM.integrations.formSubmission(t,{formProvider:"pumsubform",formId:r,formInstanceId:a,extras:{data:o,values:i,settings:n}}),t.trigger("pumNewsletterSuccess",[o]).addClass("pum-newsletter-success"),t[0].reset(),window.pum.hooks.doAction("pum-sub-form.success",o,t),"string"==typeof n.redirect&&""!==n.redirect&&(n.redirect=atob(n.redirect)),window.PUM.forms.success(t,n)}).on("error","form.pum-sub-form",function(e,o){var t=p(e.target);t.trigger("pumNewsletterError",[o]),window.pum.hooks.doAction("pum-sub-form.errors",o,t)}))}(jQuery),function(s,r){"use strict";s.extend(s.fn.popmake.methods,{addTrigger:function(e){return s.fn.popmake.triggers[e]?s.fn.popmake.triggers[e].apply(this,Array.prototype.slice.call(arguments,1)):(window.console&&console.warn("Trigger type "+e+" does not exist."),this)}}),s.fn.popmake.triggers={auto_open:function(e){var o=PUM.getPopup(this);setTimeout(function(){o.popmake("state","isOpen")||!o.popmake("checkCookies",e)&&o.popmake("checkConditions")&&(s.fn.popmake.last_open_trigger="Auto Open - Delay: "+e.delay,o.popmake("open"))},e.delay)},click_open:function(n){var e,i=PUM.getPopup(this),o=i.popmake("getSettings"),t=[".popmake-"+o.id,".popmake-"+decodeURIComponent(o.slug),'a[href$="#popmake-'+o.id+'"]'];n.extra_selectors&&""!==n.extra_selectors&&t.push(n.extra_selectors),e=(t=pum.hooks.applyFilters("pum.trigger.click_open.selectors",t,n,i)).join(", "),s(e).addClass("pum-trigger").css({cursor:"pointer"}),s(r).on("click.pumTrigger",e,function(e){var o=s(this),t=n.do_default||!1;0<i.has(o).length||i.popmake("state","isOpen")||!i.popmake("checkCookies",n)&&i.popmake("checkConditions")&&(o.data("do-default")?t=o.data("do-default"):(o.hasClass("do-default")||o.hasClass("popmake-do-default")||o.hasClass("pum-do-default"))&&(t=!0),e.ctrlKey||pum.hooks.applyFilters("pum.trigger.click_open.do_default",t,i,o)||(e.preventDefault(),e.stopPropagation()),s.fn.popmake.last_open_trigger=o,i.popmake("open"))})},form_submission:function(t){var n=PUM.getPopup(this);t=s.extend({form:"",formInstanceId:"",delay:0},t);PUM.hooks.addAction("pum.integration.form.success",function(e,o){t.form.length&&PUM.integrations.checkFormKeyMatches(t.form,t.formInstanceId,o)&&setTimeout(function(){n.popmake("state","isOpen")||!n.popmake("checkCookies",t)&&n.popmake("checkConditions")&&(s.fn.popmake.last_open_trigger="Form Submission",n.popmake("open"))},t.delay)})},admin_debug:function(){PUM.getPopup(this).popmake("open")}},s(r).on("pumInit",".pum",function(){var e,o=PUM.getPopup(this),t=o.popmake("getSettings").triggers||[],n=null;if(t.length)for(e=0;e<t.length;e+=1)n=t[e],o.popmake("addTrigger",n.type,n.settings)})}(jQuery,document),function(p){"use strict";var n="color,date,datetime,datetime-local,email,hidden,month,number,password,range,search,tel,text,time,url,week".split(","),i="select,textarea".split(","),s=/\[([^\]]*)\]/g;Array.prototype.indexOf||(Array.prototype.indexOf=function(e){if(null==this)throw new TypeError;var o=Object(this),t=o.length>>>0;if(0==t)return-1;var n=0;if(0<arguments.length&&((n=Number(arguments[1]))!=n?n=0:0!==n&&n!==1/0&&n!==-1/0&&(n=(0<n||-1)*Math.floor(Math.abs(n)))),t<=n)return-1;for(var i=0<=n?n:Math.max(t-Math.abs(n),0);i<t;i++)if(i in o&&o[i]===e)return i;return-1}),p.fn.popmake.utilities={scrollTo:function(e,o){var t=p(e)||p();t.length&&p("html, body").animate({scrollTop:t.offset().top-100},1e3,"swing",function(){var e=t.find(':input:not([type="button"]):not([type="hidden"]):not(button)').eq(0);e.hasClass("wp-editor-area")?tinyMCE.execCommand("mceFocus",!1,e.attr("id")):e.focus(),"function"==typeof o&&o()})},inArray:function(e,o){return!!~o.indexOf(e)},convert_hex:function(e,o){return e=e.replace("#",""),"rgba("+parseInt(e.substring(0,2),16)+","+parseInt(e.substring(2,4),16)+","+parseInt(e.substring(4,6),16)+","+o/100+")"},debounce:function(t,n){var i;return function(){var e=this,o=arguments;window.clearTimeout(i),i=window.setTimeout(function(){t.apply(e,o)},n)}},throttle:function(e,o){function t(){n=!1}var n=!1;return function(){n||(e.apply(this,arguments),window.setTimeout(t,o),n=!0)}},getXPath:function(e){var t,n,i,s,r,a=[];return p.each(p(e).parents(),function(e,o){return t=p(o),n=t.attr("id")||"",i=t.attr("class")||"",s=t.get(0).tagName.toLowerCase(),r=t.parent().children(s).index(t),"body"!==s&&(0<i.length&&(i=(i=i.split(" "))[0]),void a.push(s+(0<n.length?"#"+n:0<i.length?"."+i.split(" ").join("."):":eq("+r+")")))}),a.reverse().join(" > ")},strtotime:function(e,o){var t,n,i,s,l,c,m,r,a,p;if(!e)return!1;if((n=(e=e.replace(/^\s+|\s+$/g,"").replace(/\s{2,}/g," ").replace(/[\t\r\n]/g,"").toLowerCase()).match(/^(\d{1,4})([\-\.\/\:])(\d{1,2})([\-\.\/\:])(\d{1,4})(?:\s(\d{1,2}):(\d{2})?:?(\d{2})?)?(?:\s([A-Z]+)?)?$/))&&n[2]===n[4])if(1901<n[1])switch(n[2]){case"-":return 12<n[3]||31<n[5]?!1:new Date(n[1],parseInt(n[3],10)-1,n[5],n[6]||0,n[7]||0,n[8]||0,n[9]||0)/1e3;case".":return!1;case"/":return 12<n[3]||31<n[5]?!1:new Date(n[1],parseInt(n[3],10)-1,n[5],n[6]||0,n[7]||0,n[8]||0,n[9]||0)/1e3}else if(1901<n[5])switch(n[2]){case"-":case".":return 12<n[3]||31<n[1]?!1:new Date(n[5],parseInt(n[3],10)-1,n[1],n[6]||0,n[7]||0,n[8]||0,n[9]||0)/1e3;case"/":return 12<n[1]||31<n[3]?!1:new Date(n[5],parseInt(n[1],10)-1,n[3],n[6]||0,n[7]||0,n[8]||0,n[9]||0)/1e3}else switch(n[2]){case"-":return 12<n[3]||31<n[5]||n[1]<70&&38<n[1]?!1:(s=0<=n[1]&&n[1]<=38?+n[1]+2e3:n[1],new Date(s,parseInt(n[3],10)-1,n[5],n[6]||0,n[7]||0,n[8]||0,n[9]||0)/1e3);case".":return 70<=n[5]?!(12<n[3]||31<n[1])&&new Date(n[5],parseInt(n[3],10)-1,n[1],n[6]||0,n[7]||0,n[8]||0,n[9]||0)/1e3:n[5]<60&&!n[6]&&(!(23<n[1]||59<n[3])&&(i=new Date,new Date(i.getFullYear(),i.getMonth(),i.getDate(),n[1]||0,n[3]||0,n[5]||0,n[9]||0)/1e3));case"/":return 12<n[1]||31<n[3]||n[5]<70&&38<n[5]?!1:(s=0<=n[5]&&n[5]<=38?+n[5]+2e3:n[5],new Date(s,parseInt(n[1],10)-1,n[3],n[6]||0,n[7]||0,n[8]||0,n[9]||0)/1e3);case":":return 23<n[1]||59<n[3]||59<n[5]?!1:(i=new Date,new Date(i.getFullYear(),i.getMonth(),i.getDate(),n[1]||0,n[3]||0,n[5]||0)/1e3)}if("now"===e)return null===o||isNaN(o)?(new Date).getTime()/1e3||0:o||0;if(t=Date.parse(e),!isNaN(t))return t/1e3||0;function u(e){var o,t,n,i,s=e.split(" "),r=s[0],a=s[1].substring(0,3),p=/\d+/.test(r),u=("last"===r?-1:1)*("ago"===s[2]?-1:1);if(p&&(u*=parseInt(r,10)),m.hasOwnProperty(a)&&!s[1].match(/^mon(day|\.)?$/i))return l["set"+m[a]](l["get"+m[a]]()+u);if("wee"===a)return l.setDate(l.getDate()+7*u);if("next"===r||"last"===r)o=r,t=u,void 0!==(i=c[a])&&(0===(n=i-l.getDay())?n=7*t:0<n&&"last"===o?n-=7:n<0&&"next"===o&&(n+=7),l.setDate(l.getDate()+n));else if(!p)return;return 1}if(l=o?new Date(1e3*o):new Date,c={sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6},m={yea:"FullYear",mon:"Month",day:"Date",hou:"Hours",min:"Minutes",sec:"Seconds"},a="(years?|months?|weeks?|days?|hours?|minutes?|min|seconds?|sec|sunday|sun\\.?|monday|mon\\.?|tuesday|tue\\.?|wednesday|wed\\.?|thursday|thu\\.?|friday|fri\\.?|saturday|sat\\.?)",!(n=e.match(new RegExp("([+-]?\\d+\\s(years?|months?|weeks?|days?|hours?|minutes?|min|seconds?|sec|sunday|sun\\.?|monday|mon\\.?|tuesday|tue\\.?|wednesday|wed\\.?|thursday|thu\\.?|friday|fri\\.?|saturday|sat\\.?)|(last|next)\\s(years?|months?|weeks?|days?|hours?|minutes?|min|seconds?|sec|sunday|sun\\.?|monday|mon\\.?|tuesday|tue\\.?|wednesday|wed\\.?|thursday|thu\\.?|friday|fri\\.?|saturday|sat\\.?))(\\sago)?","gi"))))return!1;for(p=0,r=n.length;p<r;p+=1)if(!u(n[p]))return!1;return l.getTime()/1e3},serializeObject:function(e){p.extend({},e);var o={},t=p.extend(!0,{include:[],exclude:[],includeByClass:""},e);return this.find(":input").each(function(){var e;!this.name||this.disabled||window.PUM.utilities.inArray(this.name,t.exclude)||t.include.length&&!window.PUM.utilities.inArray(this.name,t.include)||-1===this.className.indexOf(t.includeByClass)||(e=this.name.replace(s,"[$1").split("["))[0]&&(this.checked||window.PUM.utilities.inArray(this.type,n)||window.PUM.utilities.inArray(this.nodeName.toLowerCase(),i))&&("checkbox"===this.type&&e.push(""),function e(o,t,n){var i=t[0];1<t.length?(o[i]||(o[i]=t[1]?{}:[]),e(o[i],t.slice(1),n)):o[i=i||o.length]=n}(o,e,p(this).val()))}),o}},p.fn.popmake.utilies=p.fn.popmake.utilities,window.PUM=window.PUM||{},window.PUM.utilities=window.PUM.utilities||{},window.PUM.utilities=p.extend(window.PUM.utilities,p.fn.popmake.utilities)}(jQuery,document),function(e){!function(e,m){var d={validate:/^[a-z_][a-z0-9_]*(?:\[(?:\d*|[a-z0-9_]+)\])*$/i,key:/[a-z0-9_]+|(?=\[\])/gi,push:/^$/,fixed:/^\d+$/,named:/^[a-z0-9_]+$/i};function t(n,o){var t={},i={};function s(e,o,t){e[o]=t;return e}function r(e,o){var t=e.match(d.key),n;try{o=JSON.parse(o)}catch(e){}while((n=t.pop())!==undefined){if(d.push.test(n)){var i=a(e.replace(/\[\]$/,""));o=s([],i,o)}else if(d.fixed.test(n)){o=s([],n,o)}else if(d.named.test(n)){o=s({},n,o)}}return o}function a(e){if(i[e]===undefined){i[e]=0}return i[e]++}function p(e){switch(m('[name="'+e.name+'"]',o).attr("type")){case"checkbox":return e.value==="1"?true:e.value;default:return e.value}}function e(e){if(!d.validate.test(e.name))return this;var o=r(e.name,p(e));t=n.extend(true,t,o);return this}function u(e){if(!n.isArray(e)){throw new Error("formSerializer.addPairs expects an Array")}for(var o=0,t=e.length;o<t;o++){this.addPair(e[o])}return this}function l(){return t}function c(){return JSON.stringify(l())}this.addPair=e;this.addPairs=u;this.serialize=l;this.serializeJSON=c}if(t.patterns=d,t.serializeObject=function e(){var o;if(this.is("form")){o=this.serializeArray()}else{o=this.find(":input").serializeArray()}return new t(m,this).addPairs(o).serialize()},t.serializeJSON=function e(){var o;if(this.is("form")){o=this.serializeArray()}else{o=this.find(":input").serializeArray()}return new t(m,this).addPairs(o).serializeJSON()},typeof m.fn!=="undefined"){m.fn.pumSerializeObject=t.serializeObject;m.fn.pumSerializeJSON=t.serializeJSON}e.FormSerializer=t}(e,e.jQuery||e.Zepto||e.ender||e.$)}(this),function(e){("object"!=typeof exports||"undefined"==typeof module)&&"function"==typeof define&&define.amd?define(e):e()}(function(){"use strict";function e(o){var t=this.constructor;return this.then(function(e){return t.resolve(o()).then(function(){return e})},function(e){return t.resolve(o()).then(function(){return t.reject(e)})})}var o=setTimeout;function p(e){return Boolean(e&&void 0!==e.length)}function n(){}function s(e){if(!(this instanceof s))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],c(e,this)}function i(t,n){for(;3===t._state;)t=t._value;0!==t._state?(t._handled=!0,s._immediateFn(function(){var e,o=1===t._state?n.onFulfilled:n.onRejected;if(null!==o){try{e=o(t._value)}catch(e){return void a(n.promise,e)}r(n.promise,e)}else(1===t._state?r:a)(n.promise,t._value)})):t._deferreds.push(n)}function r(o,e){try{if(e===o)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var t=e.then;if(e instanceof s)return o._state=3,o._value=e,void u(o);if("function"==typeof t)return void c((n=t,i=e,function(){n.apply(i,arguments)}),o)}o._state=1,o._value=e,u(o)}catch(e){a(o,e)}var n,i}function a(e,o){e._state=2,e._value=o,u(e)}function u(e){2===e._state&&0===e._deferreds.length&&s._immediateFn(function(){e._handled||s._unhandledRejectionFn(e._value)});for(var o=0,t=e._deferreds.length;o<t;o++)i(e,e._deferreds[o]);e._deferreds=null}function l(e,o,t){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof o?o:null,this.promise=t}function c(e,o){var t=!1;try{e(function(e){t||(t=!0,r(o,e))},function(e){t||(t=!0,a(o,e))})}catch(e){if(t)return;t=!0,a(o,e)}}s.prototype.catch=function(e){return this.then(null,e)},s.prototype.then=function(e,o){var t=new this.constructor(n);return i(this,new l(e,o,t)),t},s.prototype.finally=e,s.all=function(o){return new s(function(i,s){if(!p(o))return s(new TypeError("Promise.all accepts an array"));var r=Array.prototype.slice.call(o);if(0===r.length)return i([]);var a=r.length;for(var e=0;e<r.length;e++)!function o(t,e){try{if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if("function"==typeof n)return void n.call(e,function(e){o(t,e)},s)}r[t]=e,0==--a&&i(r)}catch(e){s(e)}}(e,r[e])})},s.resolve=function(o){return o&&"object"==typeof o&&o.constructor===s?o:new s(function(e){e(o)})},s.reject=function(t){return new s(function(e,o){o(t)})},s.race=function(i){return new s(function(e,o){if(!p(i))return o(new TypeError("Promise.race accepts an array"));for(var t=0,n=i.length;t<n;t++)s.resolve(i[t]).then(e,o)})},s._immediateFn="function"==typeof setImmediate?function(e){setImmediate(e)}:function(e){o(e,0)},s._unhandledRejectionFn=function(e){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var t=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw new Error("unable to locate global object")}();"Promise"in t?t.Promise.prototype.finally||(t.Promise.prototype.finally=e):t.Promise=s});
|
1 |
+
var PUM,PUM_Accessibility,PUM_Analytics,pm_cookie,pm_cookie_json,pm_remove_cookie;!function(r){"use strict";void 0===r.fn.on&&(r.fn.on=function(e,o,t){return this.delegate(o,e,t)}),void 0===r.fn.off&&(r.fn.off=function(e,o,t){return this.undelegate(o,e,t)}),void 0===r.fn.bindFirst&&(r.fn.bindFirst=function(e,o){var t,n,i=r(this);i.unbind(e,o),i.bind(e,o),(n=(t=r._data(i[0]).events)[e]).unshift(n.pop()),t[e]=n}),void 0===r.fn.outerHtml&&(r.fn.outerHtml=function(){var e=r(this).clone();return r("<div/>").append(e).html()}),void 0===r.fn.isInViewport&&(r.fn.isInViewport=function(){var e=r(this).offset().top,o=e+r(this).outerHeight(),t=r(window).scrollTop(),n=t+r(window).height();return t<o&&e<n}),void 0===Date.now&&(Date.now=function(){return(new Date).getTime()})}(jQuery),function(p,r,s){"use strict";function i(e,o){function t(e,o,t){return o?e[o.slice(0,t?-1:o.length)]:e}return o.split(".").reduce(function(e,o){return o?o.split("[").reduce(t,e):e},e)}window.pum_vars=window.pum_vars||{default_theme:"0",home_url:"/",version:1.7,pm_dir_url:"",ajaxurl:"",restapi:!1,analytics_api:!1,rest_nonce:null,debug_mode:!1,disable_tracking:!0,message_position:"top",core_sub_forms_enabled:!0,popups:{}},window.pum_popups=window.pum_popups||{},window.pum_vars.popups=window.pum_popups,PUM={get:new function(){function e(e,o,t){"boolean"==typeof o&&(t=o,o=!1);var n=o?o.selector+" "+e:e;return s!==i[n]&&!t||(i[n]=o?o.find(e):jQuery(e)),i[n]}var i={};return e.elementCache=i,e},getPopup:function(e){var o,t;return t=e,(o=isNaN(t)||parseInt(Number(t))!==parseInt(t)||isNaN(parseInt(t,10))?"current"===e?PUM.get(".pum-overlay.pum-active:eq(0)",!0):"open"===e?PUM.get(".pum-overlay.pum-active",!0):"closed"===e?PUM.get(".pum-overlay:not(.pum-active)",!0):e instanceof jQuery?e:p(e):PUM.get("#pum-"+e)).hasClass("pum-overlay")?o:o.hasClass("popmake")||o.parents(".pum-overlay").length?o.parents(".pum-overlay"):p()},open:function(e,o){PUM.getPopup(e).popmake("open",o)},close:function(e,o){PUM.getPopup(e).popmake("close",o)},preventOpen:function(e){PUM.getPopup(e).addClass("preventOpen")},getSettings:function(e){return PUM.getPopup(e).popmake("getSettings")},getSetting:function(e,o,t){var n=i(PUM.getSettings(e),o);return void 0!==n?n:t!==s?t:null},checkConditions:function(e){return PUM.getPopup(e).popmake("checkConditions")},getCookie:function(e){return p.pm_cookie(e)},getJSONCookie:function(e){return p.pm_cookie_json(e)},setCookie:function(e,o){PUM.getPopup(e).popmake("setCookie",jQuery.extend({name:"pum-"+PUM.getSetting(e,"id"),expires:"+30 days"},o))},clearCookie:function(e,o){p.pm_remove_cookie(e),"function"==typeof o&&o()},clearCookies:function(e,o){var t,n=PUM.getPopup(e).popmake("getSettings").cookies;if(n!==s&&n.length)for(t=0;n.length>t;t+=1)p.pm_remove_cookie(n[t].settings.name);"function"==typeof o&&o()},getClickTriggerSelector:function(e,o){var t=PUM.getPopup(e),n=PUM.getSettings(e),i=[".popmake-"+n.id,".popmake-"+decodeURIComponent(n.slug),'a[href$="#popmake-'+n.id+'"]'];return o.extra_selectors&&""!==o.extra_selectors&&i.push(o.extra_selectors),(i=pum.hooks.applyFilters("pum.trigger.click_open.selectors",i,o,t)).join(", ")},disableClickTriggers:function(e,o){if(e!==s)if(o!==s){var t=PUM.getClickTriggerSelector(e,o);p(t).removeClass("pum-trigger"),p(r).off("click.pumTrigger click.popmakeOpen",t)}else{var n=PUM.getSetting(e,"triggers",[]);if(n.length)for(var i=0;n.length>i;i++){-1!==pum.hooks.applyFilters("pum.disableClickTriggers.clickTriggerTypes",["click_open"]).indexOf(n[i].type)&&(t=PUM.getClickTriggerSelector(e,n[i].settings),p(t).removeClass("pum-trigger"),p(r).off("click.pumTrigger click.popmakeOpen",t))}}}},p.fn.popmake=function(e){return p.fn.popmake.methods[e]?(p(r).trigger("pumMethodCall",arguments),p.fn.popmake.methods[e].apply(this,Array.prototype.slice.call(arguments,1))):"object"!=typeof e&&e?void(window.console&&console.warn("Method "+e+" does not exist on $.fn.popmake")):p.fn.popmake.methods.init.apply(this,arguments)},p.fn.popmake.methods={init:function(){return this.each(function(){var e,o=PUM.getPopup(this),t=o.popmake("getSettings");return t.theme_id<=0&&(t.theme_id=pum_vars.default_theme),t.disable_reposition!==s&&t.disable_reposition||p(window).on("resize",function(){(o.hasClass("pum-active")||o.find(".popmake.active").length)&&p.fn.popmake.utilities.throttle(setTimeout(function(){o.popmake("reposition")},25),500,!1)}),o.find(".pum-container").data("popmake",t),o.data("popmake",t).trigger("pumInit"),t.open_sound&&"none"!==t.open_sound&&((e="custom"!==t.open_sound?new Audio(pum_vars.pm_dir_url+"/assets/sounds/"+t.open_sound):new Audio(t.custom_sound)).addEventListener("canplaythrough",function(){o.data("popAudio",e)}),e.addEventListener("error",function(){console.warn("Error occurred when trying to load Popup opening sound.")}),e.load()),this})},getOverlay:function(){return PUM.getPopup(this)},getContainer:function(){return PUM.getPopup(this).find(".pum-container")},getTitle:function(){return PUM.getPopup(this).find(".pum-title")||null},getContent:function(){return PUM.getPopup(this).find(".pum-content")||null},getClose:function(){return PUM.getPopup(this).find(".pum-content + .pum-close")||null},getSettings:function(){var e=PUM.getPopup(this);return p.extend(!0,{},p.fn.popmake.defaults,e.data("popmake")||{},"object"==typeof pum_popups&&void 0!==pum_popups[e.attr("id")]?pum_popups[e.attr("id")]:{})},state:function(e){var o=PUM.getPopup(this);if(s!==e)switch(e){case"isOpen":return o.hasClass("pum-open")||o.popmake("getContainer").hasClass("active");case"isClosed":return!o.hasClass("pum-open")&&!o.popmake("getContainer").hasClass("active")}},open:function(e){var o=PUM.getPopup(this),t=o.popmake("getContainer"),n=o.popmake("getClose"),i=o.popmake("getSettings"),r=p("html");return o.trigger("pumBeforeOpen"),o.hasClass("preventOpen")||t.hasClass("preventOpen")?(console.log("prevented"),o.removeClass("preventOpen").removeClass("pum-active").trigger("pumOpenPrevented")):(i.stackable||o.popmake("close_all"),o.addClass("pum-active"),0<i.close_button_delay&&n.fadeOut(0),r.addClass("pum-open"),i.overlay_disabled?r.addClass("pum-open-overlay-disabled"):r.addClass("pum-open-overlay"),i.position_fixed?r.addClass("pum-open-fixed"):r.addClass("pum-open-scrollable"),o.popmake("setup_close").popmake("reposition").popmake("animate",i.animation_type,function(){0<i.close_button_delay&&setTimeout(function(){n.fadeIn()},i.close_button_delay),o.trigger("pumAfterOpen"),p(window).trigger("resize"),p.fn.popmake.last_open_popup=o,e!==s&&e()}),void 0!==o.data("popAudio")&&o.data("popAudio").play().catch(function(e){console.warn("Sound was not able to play when popup opened. Reason: "+e)})),this},setup_close:function(){var t=PUM.getPopup(this),e=t.popmake("getClose"),n=t.popmake("getSettings");return(e=e.add(p(".popmake-close, .pum-close",t).not(e))).off("click.pum").on("click.pum",function(e){var o=p(this);o.hasClass("pum-do-default")||o.data("do-default")!==s&&o.data("do-default")||e.preventDefault(),p.fn.popmake.last_close_trigger="Close Button",t.popmake("close")}),(n.close_on_esc_press||n.close_on_f4_press)&&p(window).off("keyup.popmake").on("keyup.popmake",function(e){27===e.keyCode&&n.close_on_esc_press&&(p.fn.popmake.last_close_trigger="ESC Key",t.popmake("close")),115===e.keyCode&&n.close_on_f4_press&&(p.fn.popmake.last_close_trigger="F4 Key",t.popmake("close"))}),n.close_on_overlay_click&&(t.on("pumAfterOpen",function(){p(r).on("click.pumCloseOverlay",function(e){p(e.target).closest(".pum-container").length||(p.fn.popmake.last_close_trigger="Overlay Click",t.popmake("close"))})}),t.on("pumAfterClose",function(){p(r).off("click.pumCloseOverlay")})),n.close_on_form_submission&&PUM.hooks.addAction("pum.integration.form.success",function(e,o){o.popup&&o.popup[0]===t[0]&&setTimeout(function(){p.fn.popmake.last_close_trigger="Form Submission",t.popmake("close")},n.close_on_form_submission_delay||0)}),t.trigger("pumSetupClose"),this},close:function(n){return this.each(function(){var e=PUM.getPopup(this),o=e.popmake("getContainer"),t=(t=e.popmake("getClose")).add(p(".popmake-close, .pum-close",e).not(t));return e.trigger("pumBeforeClose"),e.hasClass("preventClose")||o.hasClass("preventClose")?e.removeClass("preventClose").trigger("pumClosePrevented"):o.fadeOut("fast",function(){e.is(":visible")&&e.fadeOut("fast"),p(window).off("keyup.popmake"),e.off("click.popmake"),t.off("click.popmake"),1===p(".pum-active").length&&p("html").removeClass("pum-open").removeClass("pum-open-scrollable").removeClass("pum-open-overlay").removeClass("pum-open-overlay-disabled").removeClass("pum-open-fixed"),e.removeClass("pum-active").trigger("pumAfterClose"),o.find("iframe").filter('[src*="youtube"],[src*="vimeo"]').each(function(){var e=p(this),o=e.attr("src"),t=o.replace("autoplay=1","1=1");t!==o&&(o=t),e.prop("src",o)}),o.find("video").each(function(){this.pause()}),n!==s&&n()}),this})},close_all:function(){return p(".pum-active").popmake("close"),this},reposition:function(e){var o=PUM.getPopup(this).trigger("pumBeforeReposition"),t=o.popmake("getContainer"),n=o.popmake("getSettings"),i=n.location,r={my:"",at:"",of:window,collision:"none",using:"function"==typeof e?e:p.fn.popmake.callbacks.reposition_using},s={overlay:null,container:null},a=null;try{a=p(p.fn.popmake.last_open_trigger)}catch(e){a=p()}return n.position_from_trigger&&a.length?(r.of=a,0<=i.indexOf("left")&&(r.my+=" right",r.at+=" left"+(0!==n.position_left?"-"+n.position_left:"")),0<=i.indexOf("right")&&(r.my+=" left",r.at+=" right"+(0!==n.position_right?"+"+n.position_right:"")),0<=i.indexOf("center")&&(r.my="center"===i?"center":r.my+" center",r.at="center"===i?"center":r.at+" center"),0<=i.indexOf("top")&&(r.my+=" bottom",r.at+=" top"+(0!==n.position_top?"-"+n.position_top:"")),0<=i.indexOf("bottom")&&(r.my+=" top",r.at+=" bottom"+(0!==n.position_bottom?"+"+n.position_bottom:""))):(0<=i.indexOf("left")&&(r.my+=" left"+(0!==n.position_left?"+"+n.position_left:""),r.at+=" left"),0<=i.indexOf("right")&&(r.my+=" right"+(0!==n.position_right?"-"+n.position_right:""),r.at+=" right"),0<=i.indexOf("center")&&(r.my="center"===i?"center":r.my+" center",r.at="center"===i?"center":r.at+" center"),0<=i.indexOf("top")&&(r.my+=" top"+(0!==n.position_top?"+"+(p("body").hasClass("admin-bar")?parseInt(n.position_top,10)+32:n.position_top):""),r.at+=" top"),0<=i.indexOf("bottom")&&(r.my+=" bottom"+(0!==n.position_bottom?"-"+n.position_bottom:""),r.at+=" bottom")),r.my=p.trim(r.my),r.at=p.trim(r.at),o.is(":hidden")&&(s.overlay=o.css("opacity"),o.css({opacity:0}).show(0)),t.is(":hidden")&&(s.container=t.css("opacity"),t.css({opacity:0}).show(0)),n.position_fixed&&t.addClass("fixed"),"custom"===n.size?t.css({width:n.custom_width,height:n.custom_height_auto?"auto":n.custom_height}):"auto"!==n.size&&t.addClass("responsive").css({minWidth:""!==n.responsive_min_width?n.responsive_min_width:"auto",maxWidth:""!==n.responsive_max_width?n.responsive_max_width:"auto"}),o.trigger("pumAfterReposition"),t.addClass("custom-position").position(r).trigger("popmakeAfterReposition"),"center"===i&&t[0].offsetTop<0&&t.css({top:p("body").hasClass("admin-bar")?42:10}),s.overlay&&o.css({opacity:s.overlay}).hide(0),s.container&&t.css({opacity:s.container}).hide(0),this},animation_origin:function(e){var o=PUM.getPopup(this).popmake("getContainer"),t={my:"",at:""};switch(e){case"top":t={my:"left+"+o.offset().left+" bottom-100",at:"left top"};break;case"bottom":t={my:"left+"+o.offset().left+" top+100",at:"left bottom"};break;case"left":t={my:"right top+"+o.offset().top,at:"left top"};break;case"right":t={my:"left top+"+o.offset().top,at:"right top"};break;default:0<=e.indexOf("left")&&(t={my:t.my+" right",at:t.at+" left"}),0<=e.indexOf("right")&&(t={my:t.my+" left",at:t.at+" right"}),0<=e.indexOf("center")&&(t={my:t.my+" center",at:t.at+" center"}),0<=e.indexOf("top")&&(t={my:t.my+" bottom-100",at:t.at+" top"}),0<=e.indexOf("bottom")&&(t={my:t.my+" top+100",at:t.at+" bottom"}),t.my=p.trim(t.my),t.at=p.trim(t.at)}return t.of=window,t.collision="none",t}}}(jQuery,document),function(t){var n={};function i(e){if(n[e])return n[e].exports;var o=n[e]={i:e,l:!1,exports:{}};return t[e].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=t,i.c=n,i.d=function(e,o,t){i.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(o,e){if(1&e&&(o=i(o)),8&e)return o;if(4&e&&"object"==typeof o&&o&&o.__esModule)return o;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:o}),2&e&&"string"!=typeof o)for(var n in o)i.d(t,n,function(e){return o[e]}.bind(null,n));return t},i.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(o,"a",o),o},i.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},i.p="",i(i.s="./assets/js/src/integration/calderaforms.js")}({"./assets/js/src/integration/calderaforms.js":function(e,o,t){"use strict";t.r(o);var a,n=t("./node_modules/@babel/runtime/helpers/slicedToArray.js"),p=t.n(n);(0,window.jQuery)(document).on("cf.ajax.request",function(e,o){return a=o.$form}).on("cf.submission",function(e,o){var t,n,i,r,s;"complete"!==o.data.status&&"success"!==o.data.status||(t=a.attr("id").split("_"),i=(n=p()(t,2))[0],s=void 0===(r=n[1])?null:r,window.PUM.integrations.formSubmission(a,{formProvider:"calderaforms",formId:i,formInstanceId:s,extras:{state:window.cfstate.hasOwnProperty(i)?window.cfstate[i]:null}}))})},"./node_modules/@babel/runtime/helpers/arrayLikeToArray.js":function(e,o){e.exports=function(e,o){(null==o||o>e.length)&&(o=e.length);for(var t=0,n=new Array(o);t<o;t++)n[t]=e[t];return n}},"./node_modules/@babel/runtime/helpers/arrayWithHoles.js":function(e,o){e.exports=function(e){if(Array.isArray(e))return e}},"./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js":function(e,o){e.exports=function(e,o){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var t=[],n=!0,i=!1,r=void 0;try{for(var s,a=e[Symbol.iterator]();!(n=(s=a.next()).done)&&(t.push(s.value),!o||t.length!==o);n=!0);}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}return t}}},"./node_modules/@babel/runtime/helpers/nonIterableRest.js":function(e,o){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}},"./node_modules/@babel/runtime/helpers/slicedToArray.js":function(e,o,t){var n=t("./node_modules/@babel/runtime/helpers/arrayWithHoles.js"),i=t("./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js"),r=t("./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js"),s=t("./node_modules/@babel/runtime/helpers/nonIterableRest.js");e.exports=function(e,o){return n(e)||i(e,o)||r(e,o)||s()}},"./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js":function(e,o,t){var n=t("./node_modules/@babel/runtime/helpers/arrayLikeToArray.js");e.exports=function(e,o){if(e){if("string"==typeof e)return n(e,o);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(e,o):void 0}}}}),function(t){var n={};function i(e){if(n[e])return n[e].exports;var o=n[e]={i:e,l:!1,exports:{}};return t[e].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=t,i.c=n,i.d=function(e,o,t){i.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(o,e){if(1&e&&(o=i(o)),8&e)return o;if(4&e&&"object"==typeof o&&o&&o.__esModule)return o;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:o}),2&e&&"string"!=typeof o)for(var n in o)i.d(t,n,function(e){return o[e]}.bind(null,n));return t},i.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(o,"a",o),o},i.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},i.p="",i(i.s="./assets/js/src/integration/contactform7.js")}({"./assets/js/src/integration/contactform7.js":function(e,o,t){"use strict";t.r(o);var n=t("./node_modules/@babel/runtime/helpers/typeof.js"),a=t.n(n),p=window.jQuery;p(document).on("wpcf7mailsent",function(e,o){var t=e.detail.contactFormId,n=p(e.target),i=e.detail.id.split("-").pop().replace("o","");window.PUM.integrations.formSubmission(n,{formProvider:"contactform7",formId:t,formInstanceId:i,extras:{details:o}});var r=n.find("input.wpcf7-pum"),s=!!r.length&&JSON.parse(r.val());"object"===a()(s)&&void 0!==s.closedelay&&3<=s.closedelay.toString().length&&(s.closedelay=s.closedelay/1e3),window.PUM.forms.success(n,s)})},"./node_modules/@babel/runtime/helpers/typeof.js":function(o,e){function t(e){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?o.exports=t=function(e){return typeof e}:o.exports=t=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}o.exports=t}}),function(t){var n={};function i(e){if(n[e])return n[e].exports;var o=n[e]={i:e,l:!1,exports:{}};return t[e].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=t,i.c=n,i.d=function(e,o,t){i.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(o,e){if(1&e&&(o=i(o)),8&e)return o;if(4&e&&"object"==typeof o&&o&&o.__esModule)return o;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:o}),2&e&&"string"!=typeof o)for(var n in o)i.d(t,n,function(e){return o[e]}.bind(null,n));return t},i.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(o,"a",o),o},i.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},i.p="",i(i.s="./assets/js/src/integration/formidableforms.js")}({"./assets/js/src/integration/formidableforms.js":function(e,o){var s=window.jQuery;s(document).on("frmFormComplete",function(e,o,t){var n=s(o),i=n.find('input[name="form_id"]').val(),r=PUM.getPopup(n.find('input[name="pum_form_popup_id"]').val());window.PUM.integrations.formSubmission(n,{popup:r,formProvider:"formidableforms",formId:i,extras:{response:t}})})}}),function(t){var n={};function i(e){if(n[e])return n[e].exports;var o=n[e]={i:e,l:!1,exports:{}};return t[e].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=t,i.c=n,i.d=function(e,o,t){i.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(o,e){if(1&e&&(o=i(o)),8&e)return o;if(4&e&&"object"==typeof o&&o&&o.__esModule)return o;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:o}),2&e&&"string"!=typeof o)for(var n in o)i.d(t,n,function(e){return o[e]}.bind(null,n));return t},i.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(o,"a",o),o},i.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},i.p="",i(i.s="./assets/js/src/integration/gravityforms.js")}({"./assets/js/src/integration/gravityforms.js":function(e,o,t){"use strict";t.r(o);var n=t("./node_modules/@babel/runtime/helpers/typeof.js"),i=t.n(n),r=window.jQuery,s={};r(document).on("gform_confirmation_loaded",function(e,o){var t=r("#gform_confirmation_wrapper_"+o+",#gforms_confirmation_message_"+o)[0];window.PUM.integrations.formSubmission(t,{formProvider:"gravityforms",formId:o}),window.PUM.forms.success(t,s[o]||{})}).ready(function(){r(".gform_wrapper > form").each(function(){var e=r(this),o=e.attr("id").replace("gform_",""),t=e.find("input.gforms-pum"),n=!!t.length&&JSON.parse(t.val());n&&"object"===i()(n)&&("object"===i()(n)&&void 0!==n.closedelay&&3<=n.closedelay.toString().length&&(n.closedelay=n.closedelay/1e3),s[o]=n)})})},"./node_modules/@babel/runtime/helpers/typeof.js":function(o,e){function t(e){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?o.exports=t=function(e){return typeof e}:o.exports=t=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}o.exports=t}}),function(t){var n={};function i(e){if(n[e])return n[e].exports;var o=n[e]={i:e,l:!1,exports:{}};return t[e].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=t,i.c=n,i.d=function(e,o,t){i.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(o,e){if(1&e&&(o=i(o)),8&e)return o;if(4&e&&"object"==typeof o&&o&&o.__esModule)return o;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:o}),2&e&&"string"!=typeof o)for(var n in o)i.d(t,n,function(e){return o[e]}.bind(null,n));return t},i.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(o,"a",o),o},i.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},i.p="",i(i.s="./assets/js/src/integration/mc4wp.js")}({"./assets/js/src/integration/mc4wp.js":function(e,o){var r=window.jQuery;r(document).ready(function(){"undefined"!=typeof mc4wp&&mc4wp.forms.on("success",function(e,o){var t=r(e.element),n=e.id,i=r(".mc4wp-form-"+e.id).index(t)+1;window.PUM.integrations.formSubmission(t,{formProvider:"mc4wp",formId:n,formInstanceId:i,extras:{form:e,data:o}})})})}}),function(t){var n={};function i(e){if(n[e])return n[e].exports;var o=n[e]={i:e,l:!1,exports:{}};return t[e].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=t,i.c=n,i.d=function(e,o,t){i.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(o,e){if(1&e&&(o=i(o)),8&e)return o;if(4&e&&"object"==typeof o&&o&&o.__esModule)return o;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:o}),2&e&&"string"!=typeof o)for(var n in o)i.d(t,n,function(e){return o[e]}.bind(null,n));return t},i.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(o,"a",o),o},i.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},i.p="",i(i.s="./assets/js/src/integration/ninjaforms.js")}({"./assets/js/src/integration/ninjaforms.js":function(e,o,t){"use strict";t.r(o);var n=t("./node_modules/@babel/runtime/helpers/slicedToArray.js"),c=t.n(n),d=window.jQuery,i=!1;d(document).ready(function(){"undefined"!=typeof Marionette&&"undefined"!=typeof nfRadio&&!1===i&&new(i=Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.popupMaker)},popupMaker:function(e,o,t,n){var i=d("#nf-form-"+n+"-cont"),r=n.split("_"),s=c()(r,2),a=s[0],p=s[1],u=void 0===p?null:p,l={};e.errors.length||(window.PUM.integrations.formSubmission(i,{formProvider:"ninjaforms",formId:a,formInstanceId:u,extras:{response:e}}),void 0!==e.data.actions&&(l.openpopup=void 0!==e.data.actions.openpopup,l.openpopup_id=l.openpopup?parseInt(e.data.actions.openpopup):0,l.closepopup=void 0!==e.data.actions.closepopup,l.closedelay=l.closepopup?parseInt(e.data.actions.closepopup):0,l.closepopup&&e.data.actions.closedelay&&(l.closedelay=parseInt(e.data.actions.closedelay))),window.PUM.forms.success(i,l))}}))})},"./node_modules/@babel/runtime/helpers/arrayLikeToArray.js":function(e,o){e.exports=function(e,o){(null==o||o>e.length)&&(o=e.length);for(var t=0,n=new Array(o);t<o;t++)n[t]=e[t];return n}},"./node_modules/@babel/runtime/helpers/arrayWithHoles.js":function(e,o){e.exports=function(e){if(Array.isArray(e))return e}},"./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js":function(e,o){e.exports=function(e,o){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var t=[],n=!0,i=!1,r=void 0;try{for(var s,a=e[Symbol.iterator]();!(n=(s=a.next()).done)&&(t.push(s.value),!o||t.length!==o);n=!0);}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}return t}}},"./node_modules/@babel/runtime/helpers/nonIterableRest.js":function(e,o){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}},"./node_modules/@babel/runtime/helpers/slicedToArray.js":function(e,o,t){var n=t("./node_modules/@babel/runtime/helpers/arrayWithHoles.js"),i=t("./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js"),r=t("./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js"),s=t("./node_modules/@babel/runtime/helpers/nonIterableRest.js");e.exports=function(e,o){return n(e)||i(e,o)||r(e,o)||s()}},"./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js":function(e,o,t){var n=t("./node_modules/@babel/runtime/helpers/arrayLikeToArray.js");e.exports=function(e,o){if(e){if("string"==typeof e)return n(e,o);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?n(e,o):void 0}}}}),function(t){var n={};function i(e){if(n[e])return n[e].exports;var o=n[e]={i:e,l:!1,exports:{}};return t[e].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=t,i.c=n,i.d=function(e,o,t){i.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(o,e){if(1&e&&(o=i(o)),8&e)return o;if(4&e&&"object"==typeof o&&o&&o.__esModule)return o;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:o}),2&e&&"string"!=typeof o)for(var n in o)i.d(t,n,function(e){return o[e]}.bind(null,n));return t},i.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(o,"a",o),o},i.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},i.p="",i(i.s="./assets/js/src/integration/wpforms.js")}({"./assets/js/src/integration/wpforms.js":function(e,o){var r=window.jQuery;r(document).on("wpformsAjaxSubmitSuccess",".wpforms-ajax-form",function(e,o){var t=r(this),n=t.data("formid"),i=r("form#"+t.attr("id")).index(t)+1;window.PUM.integrations.formSubmission(t,{formProvider:"wpforms",formId:n,formInstanceId:i})})}}),function(e){"use strict";e.fn.popmake.version=1.8,e.fn.popmake.last_open_popup=null,window.PUM.init=function(){console.log("init popups ✔"),e(".pum").popmake(),e(void 0).trigger("pumInitialized"),"object"==typeof pum_vars.form_success&&(pum_vars.form_success=e.extend({popup_id:null,settings:{}}),PUM.forms.success(pum_vars.form_success.popup_id,pum_vars.form_success.settings)),PUM.integrations.init()},e(void 0).ready(function(){var e=PUM.hooks.applyFilters("pum.initHandler",PUM.init),o=PUM.hooks.applyFilters("pum.initPromises",[]);Promise.all(o).then(e)}),e(".pum").on("pumInit",function(){var e=PUM.getPopup(this),o=PUM.getSetting(e,"id"),t=e.find("form");t.length&&t.append('<input type="hidden" name="pum_form_popup_id" value="'+o+'" />')})}(jQuery),function(r,t){"use strict";var n,i,s,a="a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]",e=".pum:not(.pum-accessibility-disabled)";PUM_Accessibility={forceFocus:function(e){s&&s.length&&!s[0].contains(e.target)&&(e.stopPropagation(),PUM_Accessibility.setFocusToFirstItem())},trapTabKey:function(e){var o,t,n,i;9===e.keyCode&&(o=s.find(".pum-container *").filter(a).filter(":visible"),t=r(":focus"),n=o.length,i=o.index(t),e.shiftKey?0===i&&(o.get(n-1).focus(),e.preventDefault()):i===n-1&&(o.get(0).focus(),e.preventDefault()))},setFocusToFirstItem:function(){s.find(".pum-container *").filter(a).filter(":visible").filter(":not(.pum-close)").first().focus()}},r(t).on("pumInit",e,function(){PUM.getPopup(this).find("[tabindex]").each(function(){var e=r(this);e.data("tabindex",e.attr("tabindex")).prop("tabindex","0")})}).on("pumBeforeOpen",e,function(){var e=PUM.getPopup(this),o=r(":focus");e.has(o).length||(i=o),s=e.on("keydown.pum_accessibility",PUM_Accessibility.trapTabKey).attr("aria-hidden","false"),(n=r("body > *").filter(":visible").not(s)).attr("aria-hidden","true"),r(t).one("focusin.pum_accessibility",PUM_Accessibility.forceFocus),PUM_Accessibility.setFocusToFirstItem()}).on("pumAfterOpen",e,function(){}).on("pumBeforeClose",e,function(){}).on("pumAfterClose",e,function(){PUM.getPopup(this).off("keydown.pum_accessibility").attr("aria-hidden","true"),n&&(n.attr("aria-hidden","false"),n=null),void 0!==i&&i.length&&i.focus(),s=null,r(t).off("focusin.pum_accessibility")}).on("pumSetupClose",e,function(){}).on("pumOpenPrevented",e,function(){}).on("pumClosePrevented",e,function(){}).on("pumBeforeReposition",e,function(){})}(jQuery,document),function(r){"use strict";r.fn.popmake.last_open_trigger=null,r.fn.popmake.last_close_trigger=null,r.fn.popmake.conversion_trigger=null;var s=!(void 0===pum_vars.analytics_api||!pum_vars.analytics_api);PUM_Analytics={beacon:function(e,o){var t=new Image,n=s?pum_vars.analytics_api:pum_vars.ajaxurl,i={route:pum.hooks.applyFilters("pum.analyticsBeaconRoute","/"+pum_vars.analytics_route+"/"),data:pum.hooks.applyFilters("pum.AnalyticsBeaconData",r.extend(!0,{event:"open",pid:null,_cache:+new Date},e)),callback:"function"==typeof o?o:function(){}};s?n+=i.route:i.data.action="pum_analytics",n&&(r(t).on("error success load done",i.callback),t.src=n+"?"+r.param(i.data))}},void 0!==pum_vars.disable_tracking&&pum_vars.disable_tracking||(r(document).on("pumAfterOpen.core_analytics",".pum",function(){var e=PUM.getPopup(this),o={pid:parseInt(e.popmake("getSettings").id,10)||null};0<o.pid&&!r("body").hasClass("single-popup")&&PUM_Analytics.beacon(o)}),r(function(){PUM.hooks.addAction("pum.integration.form.success",function(e,o){var t;!1!==o.ajax&&(0===o.popup.length||0<(t={pid:parseInt(o.popup.popmake("getSettings").id,10)||null,event:"conversion"}).pid&&!r("body").hasClass("single-popup")&&PUM_Analytics.beacon(t))})}))}(jQuery),function(n,r){"use strict";function s(e){var o=e.popmake("getContainer"),t={display:"",opacity:""};e.css(t),o.css(t)}function a(e){return e.overlay_disabled?0:e.animation_speed/2}function p(e){return e.overlay_disabled?parseInt(e.animation_speed):e.animation_speed/2}n.fn.popmake.methods.animate_overlay=function(e,o,t){return PUM.getPopup(this).popmake("getSettings").overlay_disabled?n.fn.popmake.overlay_animations.none.apply(this,[o,t]):n.fn.popmake.overlay_animations[e]?n.fn.popmake.overlay_animations[e].apply(this,[o,t]):(window.console&&console.warn("Animation style "+e+" does not exist."),this)},n.fn.popmake.methods.animate=function(e){return n.fn.popmake.animations[e]?n.fn.popmake.animations[e].apply(this,Array.prototype.slice.call(arguments,1)):(window.console&&console.warn("Animation style "+e+" does not exist."),this)},n.fn.popmake.animations={none:function(e){var o=PUM.getPopup(this);return o.popmake("getContainer").css({opacity:1,display:"block"}),o.popmake("animate_overlay","none",0,function(){e!==r&&e()}),this},slide:function(o){var e=PUM.getPopup(this),t=e.popmake("getContainer"),n=e.popmake("getSettings"),i=e.popmake("animation_origin",n.animation_origin);return s(e),t.position(i),e.popmake("animate_overlay","fade",a(n),function(){t.popmake("reposition",function(e){t.animate(e,p(n),"swing",function(){o!==r&&o()})})}),this},fade:function(e){var o=PUM.getPopup(this),t=o.popmake("getContainer"),n=o.popmake("getSettings");return s(o),o.css({opacity:0,display:"block"}),t.css({opacity:0,display:"block"}),o.popmake("animate_overlay","fade",a(n),function(){t.animate({opacity:1},p(n),"swing",function(){e!==r&&e()})}),this},fadeAndSlide:function(o){var e=PUM.getPopup(this),t=e.popmake("getContainer"),n=e.popmake("getSettings"),i=e.popmake("animation_origin",n.animation_origin);return s(e),e.css({display:"block",opacity:0}),t.css({display:"block",opacity:0}),t.position(i),e.popmake("animate_overlay","fade",a(n),function(){t.popmake("reposition",function(e){e.opacity=1,t.animate(e,p(n),"swing",function(){o!==r&&o()})})}),this},grow:function(e){return n.fn.popmake.animations.fade.apply(this,arguments)},growAndSlide:function(e){return n.fn.popmake.animations.fadeAndSlide.apply(this,arguments)}},n.fn.popmake.overlay_animations={none:function(e,o){PUM.getPopup(this).css({opacity:1,display:"block"}),"function"==typeof o&&o()},fade:function(e,o){PUM.getPopup(this).css({opacity:0,display:"block"}).animate({opacity:1},e,"swing",o)},slide:function(e,o){PUM.getPopup(this).slideDown(e,o)}}}(jQuery,void document),function(e,o){"use strict";e(o).on("pumInit",".pum",function(){e(this).popmake("getContainer").trigger("popmakeInit")}).on("pumBeforeOpen",".pum",function(){e(this).popmake("getContainer").addClass("active").trigger("popmakeBeforeOpen")}).on("pumAfterOpen",".pum",function(){e(this).popmake("getContainer").trigger("popmakeAfterOpen")}).on("pumBeforeClose",".pum",function(){e(this).popmake("getContainer").trigger("popmakeBeforeClose")}).on("pumAfterClose",".pum",function(){e(this).popmake("getContainer").removeClass("active").trigger("popmakeAfterClose")}).on("pumSetupClose",".pum",function(){e(this).popmake("getContainer").trigger("popmakeSetupClose")}).on("pumOpenPrevented",".pum",function(){e(this).popmake("getContainer").removeClass("preventOpen").removeClass("active")}).on("pumClosePrevented",".pum",function(){e(this).popmake("getContainer").removeClass("preventClose")}).on("pumBeforeReposition",".pum",function(){e(this).popmake("getContainer").trigger("popmakeBeforeReposition")})}(jQuery,document),function(o){"use strict";o.fn.popmake.callbacks={reposition_using:function(e){o(this).css(e)}}}(jQuery,document),function(p){"use strict";function u(){return void 0===e&&(e="undefined"!=typeof MobileDetect?new MobileDetect(window.navigator.userAgent):{phone:function(){return!1},tablet:function(){return!1}}),e}var e;p.extend(p.fn.popmake.methods,{checkConditions:function(){var e,o,t,n,i,r=PUM.getPopup(this),s=r.popmake("getSettings"),a=!0;if(s.disable_on_mobile&&u().phone())return!1;if(s.disable_on_tablet&&u().tablet())return!1;if(s.conditions.length)for(o=0;s.conditions.length>o;o++){for(n=s.conditions[o],e=!1,t=0;n.length>t&&((!(i=p.extend({},{not_operand:!1},n[t])).not_operand&&r.popmake("checkCondition",i)||i.not_operand&&!r.popmake("checkCondition",i))&&(e=!0),p(this).trigger("pumCheckingCondition",[e,i]),!e);t++);e||(a=!1)}return a},checkCondition:function(e){var o=e.target||null;e.settings;return o?p.fn.popmake.conditions[o]?p.fn.popmake.conditions[o].apply(this,[e]):window.console?(console.warn("Condition "+o+" does not exist."),!0):void 0:(console.warn("Condition type not set."),!1)}}),p.fn.popmake.conditions={}}(jQuery,document),function(c){"use strict";function d(e,o,t){var n,i=new Date;if("undefined"!=typeof document){if(1<arguments.length){switch(typeof(t=c.extend({path:pum_vars.home_url},d.defaults,t)).expires){case"number":i.setMilliseconds(i.getMilliseconds()+864e5*t.expires),t.expires=i;break;case"string":i.setTime(1e3*c.fn.popmake.utilities.strtotime("+"+t.expires)),t.expires=i}try{n=JSON.stringify(o),/^[\{\[]/.test(n)&&(o=n)}catch(e){}return o=f.write?f.write(o,e):encodeURIComponent(String(o)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=(e=(e=encodeURIComponent(String(e))).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent)).replace(/[\(\)]/g,escape),document.cookie=[e,"=",o,t.expires?"; expires="+t.expires.toUTCString():"",t.path?"; path="+t.path:"",t.domain?"; domain="+t.domain:"",t.secure?"; secure":""].join("")}e||(n={});for(var r=document.cookie?document.cookie.split("; "):[],s=/(%[0-9A-Z]{2})+/g,a=0;a<r.length;a++){var p=r[a].split("=");'"'===(l=p.slice(1).join("=")).charAt(0)&&(l=l.slice(1,-1));try{var u=p[0].replace(s,decodeURIComponent),l=f.read?f.read(l,u):f(l,u)||l.replace(s,decodeURIComponent);if(this.json)try{l=JSON.parse(l)}catch(e){}if(e===u){n=l;break}e||(n[u]=l)}catch(e){}}return n}}var f;c.extend(c.fn.popmake,{cookie:(void 0===f&&(f=function(){}),(d.set=d).get=function(e){return d.call(d,e)},d.getJSON=function(){return d.apply({json:!0},[].slice.call(arguments))},d.defaults={},d.remove=function(e,o){d(e,"",c.extend({},o,{expires:-1,path:""})),d(e,"",c.extend({},o,{expires:-1}))},d.process=function(e,o,t,n){return d.apply(d,3<arguments.length&&"object"!=typeof t&&void 0!==o?[e,o,{expires:t,path:n}]:[].slice.call(arguments,[0,2]))},d.withConverter=c.fn.popmake.cookie,d)}),pm_cookie=c.pm_cookie=c.fn.popmake.cookie.process,pm_cookie_json=c.pm_cookie_json=c.fn.popmake.cookie.getJSON,pm_remove_cookie=c.pm_remove_cookie=c.fn.popmake.cookie.remove}(jQuery),function(i,e,n){"use strict";function r(e){i.pm_cookie(e.name,!0,e.session?null:e.time,e.path?pum_vars.home_url||"/":null),pum.hooks.doAction("popmake.setCookie",e)}i.extend(i.fn.popmake.methods,{addCookie:function(e){return pum.hooks.doAction("popmake.addCookie",arguments),i.fn.popmake.cookies[e]?i.fn.popmake.cookies[e].apply(this,Array.prototype.slice.call(arguments,1)):(window.console&&console.warn("Cookie type "+e+" does not exist."),this)},setCookie:r,checkCookies:function(e){var o,t=!1;if(e.cookie_name===n||null===e.cookie_name||""===e.cookie_name)return!1;switch(typeof e.cookie_name){case"object":case"array":for(o=0;e.cookie_name.length>o;o+=1)i.pm_cookie(e.cookie_name[o])!==n&&(t=!0);break;case"string":i.pm_cookie(e.cookie_name)!==n&&(t=!0)}return pum.hooks.doAction("popmake.checkCookies",e,t),t}}),i.fn.popmake.cookies=i.fn.popmake.cookies||{},i.extend(i.fn.popmake.cookies,{on_popup_open:function(e){var o=PUM.getPopup(this);o.on("pumAfterOpen",function(){o.popmake("setCookie",e)})},on_popup_close:function(e){var o=PUM.getPopup(this);o.on("pumBeforeClose",function(){o.popmake("setCookie",e)})},form_submission:function(t){var n=PUM.getPopup(this);t=i.extend({form:"",formInstanceId:"",only_in_popup:!1},t),PUM.hooks.addAction("pum.integration.form.success",function(e,o){t.form.length&&PUM.integrations.checkFormKeyMatches(t.form,t.formInstanceId,o)&&(t.only_in_popup&&o.popup.length&&o.popup.is(n)||!t.only_in_popup)&&n.popmake("setCookie",t)})},manual:function(e){var o=PUM.getPopup(this);o.on("pumSetCookie",function(){o.popmake("setCookie",e)})},form_success:function(e){var o=PUM.getPopup(this);o.on("pumFormSuccess",function(){o.popmake("setCookie",e)})},pum_sub_form_success:function(e){var o=PUM.getPopup(this);o.find("form.pum-sub-form").on("success",function(){o.popmake("setCookie",e)})},pum_sub_form_already_subscribed:function(e){var o=PUM.getPopup(this);o.find("form.pum-sub-form").on("success",function(){o.popmake("setCookie",e)})},ninja_form_success:function(e){return i.fn.popmake.cookies.form_success.apply(this,arguments)},cf7_form_success:function(e){return i.fn.popmake.cookies.form_success.apply(this,arguments)},gforms_form_success:function(e){return i.fn.popmake.cookies.form_success.apply(this,arguments)}}),i(e).ready(function(){var e=i(".pum-cookie");e.each(function(){var o=i(this),t=e.index(o),n=o.data("cookie-args");!o.data("only-onscreen")||o.isInViewport()&&o.is(":visible")?r(n):i(window).on("scroll.pum-cookie-"+t,i.fn.popmake.utilities.throttle(function(e){o.isInViewport()&&o.is(":visible")&&(r(n),i(window).off("scroll.pum-cookie-"+t))},100))})}).on("pumInit",".pum",function(){var e,o=PUM.getPopup(this),t=o.popmake("getSettings").cookies||[],n=null;if(t.length)for(e=0;e<t.length;e+=1)n=t[e],o.popmake("addCookie",n.event,n.settings)})}(jQuery,document);var pum_debug,pum_debug_mode=!1;!function(s,e){var a,t,p;e=window.pum_vars||{debug_mode:!1},(pum_debug_mode=void 0!==e.debug_mode&&e.debug_mode)||-1===window.location.href.indexOf("pum_debug")||(pum_debug_mode=!0),pum_debug_mode&&(t=a=!1,p=window.pum_debug_vars||{debug_mode_enabled:"Popup Maker: Debug Mode Enabled",debug_started_at:"Debug started at:",debug_more_info:"For more information on how to use this information visit https://docs.wppopupmaker.com/?utm_medium=js-debug-info&utm_campaign=ContextualHelp&utm_source=browser-console&utm_content=more-info",global_info:"Global Information",localized_vars:"Localized variables",popups_initializing:"Popups Initializing",popups_initialized:"Popups Initialized",single_popup_label:"Popup: #",theme_id:"Theme ID: ",label_method_call:"Method Call:",label_method_args:"Method Arguments:",label_popup_settings:"Settings",label_triggers:"Triggers",label_cookies:"Cookies",label_delay:"Delay:",label_conditions:"Conditions",label_cookie:"Cookie:",label_settings:"Settings:",label_selector:"Selector:",label_mobile_disabled:"Mobile Disabled:",label_tablet_disabled:"Tablet Disabled:",label_event:"Event: %s",triggers:[],cookies:[]},pum_debug={odump:function(e){return s.extend({},e)},logo:function(){console.log(" -------------------------------------------------------------\n| ____ __ __ _ |\n| | _ \\ ___ _ __ _ _ _ __ | \\/ | __ _| | _____ _ __ |\n| | |_) / _ \\| '_ \\| | | | '_ \\ | |\\/| |/ _` | |/ / _ \\ '__| |\n| | __/ (_) | |_) | |_| | |_) | | | | | (_| | < __/ | |\n| |_| \\___/| .__/ \\__,_| .__/ |_| |_|\\__,_|_|\\_\\___|_| |\n| |_| |_| |\n -------------------------------------------------------------")},initialize:function(){a=!0,pum_debug.logo(),console.debug(p.debug_mode_enabled),console.log(p.debug_started_at,new Date),console.info(p.debug_more_info),pum_debug.divider(p.global_info),console.groupCollapsed(p.localized_vars),console.log("pum_vars:",pum_debug.odump(e)),s(document).trigger("pum_debug_initialize_localized_vars"),console.groupEnd(),s(document).trigger("pum_debug_initialize")},popup_event_header:function(e){var o=e.popmake("getSettings");t!==o.id&&(t=o.id,pum_debug.divider(p.single_popup_label+o.id+" - "+o.slug))},divider:function(e){var o=62,t=0,n=" "+new Array(63).join("-")+" ";"string"==typeof e?(o=62-e.length,(t={left:Math.floor(o/2),right:Math.floor(o/2)}).left+t.right===o-1&&t.right++,t.left=new Array(t.left+1).join(" "),t.right=new Array(t.right+1).join(" "),console.log(n+"\n|"+t.left+e+t.right+"|\n"+n)):console.log(n)},click_trigger:function(e,o){var t,n=e.popmake("getSettings"),i=[".popmake-"+n.id,".popmake-"+decodeURIComponent(n.slug),'a[href$="#popmake-'+n.id+'"]'];o.extra_selectors&&""!==o.extra_selectors&&i.push(o.extra_selectors),t=(i=pum.hooks.applyFilters("pum.trigger.click_open.selectors",i,o,e)).join(", "),console.log(p.label_selector,t)},trigger:function(e,o){if("string"==typeof p.triggers[o.type]){switch(console.groupCollapsed(p.triggers[o.type]),o.type){case"auto_open":console.log(p.label_delay,o.settings.delay),console.log(p.label_cookie,o.settings.cookie_name);break;case"click_open":pum_debug.click_trigger(e,o.settings),console.log(p.label_cookie,o.settings.cookie_name)}s(document).trigger("pum_debug_render_trigger",e,o),console.groupEnd()}},cookie:function(e,o){if("string"==typeof p.cookies[o.event]){switch(console.groupCollapsed(p.cookies[o.event]),o.event){case"on_popup_open":case"on_popup_close":case"manual":case"ninja_form_success":console.log(p.label_cookie,pum_debug.odump(o.settings))}s(document).trigger("pum_debug_render_trigger",e,o),console.groupEnd()}}},s(document).on("pumInit",".pum",function(){var e=PUM.getPopup(s(this)),o=e.popmake("getSettings"),t=o.triggers||[],n=o.cookies||[],i=o.conditions||[],r=0;if(a||(pum_debug.initialize(),pum_debug.divider(p.popups_initializing)),console.groupCollapsed(p.single_popup_label+o.id+" - "+o.slug),console.log(p.theme_id,o.theme_id),t.length){for(console.groupCollapsed(p.label_triggers),r=0;r<t.length;r++)pum_debug.trigger(e,t[r]);console.groupEnd()}if(n.length){for(console.groupCollapsed(p.label_cookies),r=0;r<n.length;r+=1)pum_debug.cookie(e,n[r]);console.groupEnd()}i.length&&(console.groupCollapsed(p.label_conditions),console.log(i),console.groupEnd()),console.groupCollapsed(p.label_popup_settings),console.log(p.label_mobile_disabled,!1!==o.disable_on_mobile),console.log(p.label_tablet_disabled,!1!==o.disable_on_tablet),console.log(p.label_display_settings,pum_debug.odump(o)),e.trigger("pum_debug_popup_settings"),console.groupEnd(),console.groupEnd()}).on("pumBeforeOpen",".pum",function(){var e=PUM.getPopup(s(this)),o=s.fn.popmake.last_open_trigger;pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumBeforeOpen"));try{o=(o=s(s.fn.popmake.last_open_trigger)).length?o:s.fn.popmake.last_open_trigger.toString()}catch(e){o=""}finally{console.log(p.label_triggers,[o])}console.groupEnd()}).on("pumOpenPrevented",".pum",function(){var e=PUM.getPopup(s(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumOpenPrevented")),console.groupEnd()}).on("pumAfterOpen",".pum",function(){var e=PUM.getPopup(s(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumAfterOpen")),console.groupEnd()}).on("pumSetupClose",".pum",function(){var e=PUM.getPopup(s(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumSetupClose")),console.groupEnd()}).on("pumClosePrevented",".pum",function(){var e=PUM.getPopup(s(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumClosePrevented")),console.groupEnd()}).on("pumBeforeClose",".pum",function(){var e=PUM.getPopup(s(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumBeforeClose")),console.groupEnd()}).on("pumAfterClose",".pum",function(){var e=PUM.getPopup(s(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumAfterClose")),console.groupEnd()}).on("pumBeforeReposition",".pum",function(){var e=PUM.getPopup(s(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumBeforeReposition")),console.groupEnd()}).on("pumAfterReposition",".pum",function(){var e=PUM.getPopup(s(this));pum_debug.popup_event_header(e),console.groupCollapsed(p.label_event.replace("%s","pumAfterReposition")),console.groupEnd()}).on("pumCheckingCondition",".pum",function(e,o,t){var n=PUM.getPopup(s(this));pum_debug.popup_event_header(n),console.groupCollapsed(p.label_event.replace("%s","pumCheckingCondition")),console.log((t.not_operand?"(!) ":"")+t.target+": "+o,t),console.groupEnd()}))}(jQuery),function(e){"use strict";e.fn.popmake.defaults={id:null,slug:"",theme_id:null,cookies:[],triggers:[],conditions:[],mobile_disabled:null,tablet_disabled:null,custom_height_auto:!1,scrollable_content:!1,position_from_trigger:!1,position_fixed:!1,overlay_disabled:!1,stackable:!1,disable_reposition:!1,close_on_overlay_click:!1,close_on_form_submission:!1,close_on_form_submission_delay:0,close_on_esc_press:!1,close_on_f4_press:!1,disable_on_mobile:!1,disable_on_tablet:!1,size:"medium",responsive_min_width:"0%",responsive_max_width:"100%",custom_width:"640px",custom_height:"380px",animation_type:"fade",animation_speed:"350",animation_origin:"center top",location:"center top",position_top:"100",position_bottom:"0",position_left:"0",position_right:"0",zindex:"1999999999",close_button_delay:"0",meta:{display:{stackable:!1,overlay_disabled:!1,size:"medium",responsive_max_width:"100",responsive_max_width_unit:"%",responsive_min_width:"0",responsive_min_width_unit:"%",custom_width:"640",custom_width_unit:"px",custom_height:"380",custom_height_unit:"px",custom_height_auto:!1,location:"center top",position_top:100,position_left:0,position_bottom:0,position_right:0,position_fixed:!1,animation_type:"fade",animation_speed:350,animation_origin:"center top",scrollable_content:!1,disable_reposition:!1,position_from_trigger:!1,overlay_zindex:!1,zindex:"1999999999"},close:{overlay_click:!1,esc_press:!1,f4_press:!1,text:"",button_delay:0},click_open:[]},container:{active_class:"active",attr:{class:"popmake"}},title:{attr:{class:"popmake-title"}},content:{attr:{class:"popmake-content"}},close:{close_speed:0,attr:{class:"popmake-close"}},overlay:{attr:{id:"popmake-overlay",class:"popmake-overlay"}}}}(jQuery,document),function(r){"use strict";var s={openpopup:!1,openpopup_id:0,closepopup:!1,closedelay:0,redirect_enabled:!1,redirect:"",cookie:!1};window.PUM=window.PUM||{},window.PUM.forms=window.PUM.forms||{},r.extend(window.PUM.forms,{form:{validation:{errors:[]},responseHandler:function(e,o){var t=o.data;o.success?window.PUM.forms.form.success(e,t):window.PUM.forms.form.errors(e,t)},display_errors:function(e,o){window.PUM.forms.messages.add(e,o||this.validation.errors,"error")},beforeAjax:function(e){var o=e.find('[type="submit"]'),t=o.find(".pum-form__loader");window.PUM.forms.messages.clear_all(e),t.length||(t=r('<span class="pum-form__loader"></span>'),""!==o.attr("value")?t.insertAfter(o):o.append(t)),o.prop("disabled",!0),t.show(),e.addClass("pum-form--loading").removeClass("pum-form--errors")},afterAjax:function(e){var o=e.find('[type="submit"]'),t=o.find(".pum-form__loader");o.prop("disabled",!1),t.hide(),e.removeClass("pum-form--loading")},success:function(e,o){void 0!==o.message&&""!==o.message&&window.PUM.forms.messages.add(e,[{message:o.message}]),e.trigger("success",[o]),!e.data("noredirect")&&void 0!==e.data("redirect_enabled")&&o.redirect&&(""!==o.redirect?window.location=o.redirect:window.location.reload(!0))},errors:function(e,o){void 0!==o.errors&&o.errors.length&&(console.log(o.errors),window.PUM.forms.form.display_errors(e,o.errors),window.PUM.forms.messages.scroll_to_first(e),e.addClass("pum-form--errors").trigger("errors",[o]))},submit:function(e){var o=r(this),t=o.pumSerializeObject();e.preventDefault(),e.stopPropagation(),window.PUM.forms.form.beforeAjax(o),r.ajax({type:"POST",dataType:"json",url:pum_vars.ajaxurl,data:{action:"pum_form",values:t}}).always(function(){window.PUM.forms.form.afterAjax(o)}).done(function(e){window.PUM.forms.form.responseHandler(o,e)}).error(function(e,o,t){console.log("Error: type of "+o+" with message of "+t)})}},messages:{add:function(e,o,t){var n=e.find(".pum-form__messages"),i=0;if(t=t||"success",o=o||[],!n.length)switch(n=r('<div class="pum-form__messages">').hide(),pum_vars.message_position){case"bottom":e.append(n.addClass("pum-form__messages--bottom"));break;case"top":e.prepend(n.addClass("pum-form__messages--top"))}if(0<=["bottom","top"].indexOf(pum_vars.message_position))for(;o.length>i;i++)this.add_message(n,o[i].message,t);else for(;o.length>i;i++)void 0!==o[i].field?this.add_field_error(e,o[i]):this.add_message(n,o[i].message,t);n.is(":hidden")&&r(".pum-form__message",n).length&&n.slideDown()},add_message:function(e,o,t){var n=r('<p class="pum-form__message">').html(o);t=t||"success",n.addClass("pum-form__message--"+t),e.append(n),e.is(":visible")&&n.hide().slideDown()},add_field_error:function(e,o){var t=r('[name="'+o.field+'"]',e).parents(".pum-form__field").addClass("pum-form__field--error");this.add_message(t,o.message,"error")},clear_all:function(e,o){var t=e.find(".pum-form__messages"),n=t.find(".pum-form__message"),i=e.find(".pum-form__field.pum-form__field--error");o=o||!1,t.length&&n.slideUp("fast",function(){r(this).remove(),o&&t.hide()}),i.length&&i.removeClass("pum-form__field--error").find("p.pum-form__message").remove()},scroll_to_first:function(e){window.PUM.utilities.scrollTo(r(".pum-form__field.pum-form__field--error",e).eq(0))}},success:function(e,o){var t,n,i;(o=r.extend({},s,o))&&(t=PUM.getPopup(e),n={},i=function(){o.openpopup&&PUM.getPopup(o.openpopup_id).length?PUM.open(o.openpopup_id):o.redirect_enabled&&(""!==o.redirect?window.location=o.redirect:window.location.reload(!0))},t.length&&(t.trigger("pumFormSuccess"),o.cookie&&(n=r.extend({name:"pum-"+PUM.getSetting(t,"id"),expires:"+1 year"},"object"==typeof o.cookie?o.cookie:{}),PUM.setCookie(t,n))),t.length&&o.closepopup?setTimeout(function(){t.popmake("close",i)},1e3*parseInt(o.closedelay)):i())}})}(jQuery),function(e){"use strict";e.pum=e.pum||{},e.pum.hooks=e.pum.hooks||new function(){var t=Array.prototype.slice,i={removeFilter:function(e,o){"string"==typeof e&&n("filters",e,o);return i},applyFilters:function(){var e=t.call(arguments),o=e.shift();return"string"!=typeof o?i:s("filters",o,e)},addFilter:function(e,o,t,n){"string"==typeof e&&"function"==typeof o&&(t=parseInt(t||10,10),r("filters",e,o,t,n));return i},removeAction:function(e,o){"string"==typeof e&&n("actions",e,o);return i},doAction:function(){var e=t.call(arguments),o=e.shift();"string"==typeof o&&s("actions",o,e);return i},addAction:function(e,o,t,n){"string"==typeof e&&"function"==typeof o&&(t=parseInt(t||10,10),r("actions",e,o,t,n));return i}},a={actions:{},filters:{}};function n(e,o,t,n){var i,r,s;if(a[e][o])if(t)if(i=a[e][o],n)for(s=i.length;s--;)(r=i[s]).callback===t&&r.context===n&&i.splice(s,1);else for(s=i.length;s--;)i[s].callback===t&&i.splice(s,1);else a[e][o]=[]}function r(e,o,t,n,i){var r={callback:t,priority:n,context:i},s=(s=a[e][o])?(s.push(r),function(e){for(var o,t,n,i=1,r=e.length;i<r;i++){for(o=e[i],t=i;(n=e[t-1])&&n.priority>o.priority;)e[t]=e[t-1],--t;e[t]=o}return e}(s)):[r];a[e][o]=s}function s(e,o,t){var n,i,r=a[e][o];if(!r)return"filters"===e&&t[0];if(i=r.length,"filters"===e)for(n=0;n<i;n++)t[0]=r[n].callback.apply(r[n].context,t);else for(n=0;n<i;n++)r[n].callback.apply(r[n].context,t);return"filters"!==e||t[0]}return i},e.PUM=e.PUM||{},e.PUM.hooks=e.pum.hooks}(window),function(t){"use strict";function n(e){return e}window.PUM=window.PUM||{},window.PUM.integrations=window.PUM.integrations||{},t.extend(window.PUM.integrations,{init:function(){var e;void 0!==pum_vars.form_submission&&((e=pum_vars.form_submission).ajax=!1,e.popup=0<e.popupId?PUM.getPopup(e.popupId):null,PUM.integrations.formSubmission(null,e))},formSubmission:function(e,o){(o=t.extend({popup:PUM.getPopup(e),formProvider:null,formId:null,formInstanceId:null,formKey:null,ajax:!0,tracked:!1},o)).formKey=o.formKey||[o.formProvider,o.formId,o.formInstanceId].filter(n).join("_"),o.popup&&o.popup.length&&(o.popupId=PUM.getSetting(o.popup,"id")),window.PUM.hooks.doAction("pum.integration.form.success",e,o)},checkFormKeyMatches:function(e,o,t){o=""===o&&o;var n=-1!==["any"===e,"pumsubform"===e&&"pumsubform"===t.formProvider,e===t.formProvider+"_any",!o&&new RegExp("^"+e+"(_[d]*)?").test(t.formKey),!!o&&e+"_"+o===t.formKey].indexOf(!0);return window.PUM.hooks.applyFilters("pum.integration.checkFormKeyMatches",n,{formIdentifier:e,formInstanceId:o,submittedFormArgs:t})}})}(window.jQuery),function(p){"use strict";pum_vars&&void 0!==pum_vars.core_sub_forms_enabled&&!pum_vars.core_sub_forms_enabled||(window.PUM=window.PUM||{},window.PUM.newsletter=window.PUM.newsletter||{},p.extend(window.PUM.newsletter,{form:p.extend({},window.PUM.forms.form,{submit:function(e){var o=p(this),t=o.pumSerializeObject();e.preventDefault(),e.stopPropagation(),window.PUM.newsletter.form.beforeAjax(o),p.ajax({type:"POST",dataType:"json",url:pum_vars.ajaxurl,data:{action:"pum_sub_form",values:t}}).always(function(){window.PUM.newsletter.form.afterAjax(o)}).done(function(e){window.PUM.newsletter.form.responseHandler(o,e)}).error(function(e,o,t){console.log("Error: type of "+o+" with message of "+t)})}})}),p(document).on("submit","form.pum-sub-form",window.PUM.newsletter.form.submit).on("success","form.pum-sub-form",function(e,o){var t=p(e.target),n=t.data("settings")||{},i=t.pumSerializeObject(),r=PUM.getPopup(t),s=PUM.getSetting(r,"id"),a=p("form.pum-sub-form",r).index(t)+1;window.PUM.integrations.formSubmission(t,{formProvider:"pumsubform",formId:s,formInstanceId:a,extras:{data:o,values:i,settings:n}}),t.trigger("pumNewsletterSuccess",[o]).addClass("pum-newsletter-success"),t[0].reset(),window.pum.hooks.doAction("pum-sub-form.success",o,t),"string"==typeof n.redirect&&""!==n.redirect&&(n.redirect=atob(n.redirect)),window.PUM.forms.success(t,n)}).on("error","form.pum-sub-form",function(e,o){var t=p(e.target);t.trigger("pumNewsletterError",[o]),window.pum.hooks.doAction("pum-sub-form.errors",o,t)}))}(jQuery),function(r,s){"use strict";r.extend(r.fn.popmake.methods,{addTrigger:function(e){return r.fn.popmake.triggers[e]?r.fn.popmake.triggers[e].apply(this,Array.prototype.slice.call(arguments,1)):(window.console&&console.warn("Trigger type "+e+" does not exist."),this)}}),r.fn.popmake.triggers={auto_open:function(e){var o=PUM.getPopup(this);setTimeout(function(){o.popmake("state","isOpen")||!o.popmake("checkCookies",e)&&o.popmake("checkConditions")&&(r.fn.popmake.last_open_trigger="Auto Open - Delay: "+e.delay,o.popmake("open"))},e.delay)},click_open:function(n){var e,i=PUM.getPopup(this),o=i.popmake("getSettings"),t=[".popmake-"+o.id,".popmake-"+decodeURIComponent(o.slug),'a[href$="#popmake-'+o.id+'"]'];n.extra_selectors&&""!==n.extra_selectors&&t.push(n.extra_selectors),e=(t=pum.hooks.applyFilters("pum.trigger.click_open.selectors",t,n,i)).join(", "),r(e).addClass("pum-trigger").css({cursor:"pointer"}),r(s).on("click.pumTrigger",e,function(e){var o=r(this),t=n.do_default||!1;0<i.has(o).length||i.popmake("state","isOpen")||!i.popmake("checkCookies",n)&&i.popmake("checkConditions")&&(o.data("do-default")?t=o.data("do-default"):(o.hasClass("do-default")||o.hasClass("popmake-do-default")||o.hasClass("pum-do-default"))&&(t=!0),e.ctrlKey||pum.hooks.applyFilters("pum.trigger.click_open.do_default",t,i,o)||(e.preventDefault(),e.stopPropagation()),r.fn.popmake.last_open_trigger=o,i.popmake("open"))})},form_submission:function(t){var n=PUM.getPopup(this);t=r.extend({form:"",formInstanceId:"",delay:0},t);PUM.hooks.addAction("pum.integration.form.success",function(e,o){t.form.length&&PUM.integrations.checkFormKeyMatches(t.form,t.formInstanceId,o)&&setTimeout(function(){n.popmake("state","isOpen")||!n.popmake("checkCookies",t)&&n.popmake("checkConditions")&&(r.fn.popmake.last_open_trigger="Form Submission",n.popmake("open"))},t.delay)})},admin_debug:function(){PUM.getPopup(this).popmake("open")}},r(s).on("pumInit",".pum",function(){var e,o=PUM.getPopup(this),t=o.popmake("getSettings").triggers||[],n=null;if(t.length)for(e=0;e<t.length;e+=1)n=t[e],o.popmake("addTrigger",n.type,n.settings)})}(jQuery,document),function(p){"use strict";var n="color,date,datetime,datetime-local,email,hidden,month,number,password,range,search,tel,text,time,url,week".split(","),i="select,textarea".split(","),r=/\[([^\]]*)\]/g;Array.prototype.indexOf||(Array.prototype.indexOf=function(e){if(null==this)throw new TypeError;var o=Object(this),t=o.length>>>0;if(0==t)return-1;var n=0;if(0<arguments.length&&((n=Number(arguments[1]))!=n?n=0:0!==n&&n!==1/0&&n!==-1/0&&(n=(0<n||-1)*Math.floor(Math.abs(n)))),t<=n)return-1;for(var i=0<=n?n:Math.max(t-Math.abs(n),0);i<t;i++)if(i in o&&o[i]===e)return i;return-1}),p.fn.popmake.utilities={scrollTo:function(e,o){var t=p(e)||p();t.length&&p("html, body").animate({scrollTop:t.offset().top-100},1e3,"swing",function(){var e=t.find(':input:not([type="button"]):not([type="hidden"]):not(button)').eq(0);e.hasClass("wp-editor-area")?tinyMCE.execCommand("mceFocus",!1,e.attr("id")):e.focus(),"function"==typeof o&&o()})},inArray:function(e,o){return!!~o.indexOf(e)},convert_hex:function(e,o){return e=e.replace("#",""),"rgba("+parseInt(e.substring(0,2),16)+","+parseInt(e.substring(2,4),16)+","+parseInt(e.substring(4,6),16)+","+o/100+")"},debounce:function(t,n){var i;return function(){var e=this,o=arguments;window.clearTimeout(i),i=window.setTimeout(function(){t.apply(e,o)},n)}},throttle:function(e,o){function t(){n=!1}var n=!1;return function(){n||(e.apply(this,arguments),window.setTimeout(t,o),n=!0)}},getXPath:function(e){var t,n,i,r,s,a=[];return p.each(p(e).parents(),function(e,o){return t=p(o),n=t.attr("id")||"",i=t.attr("class")||"",r=t.get(0).tagName.toLowerCase(),s=t.parent().children(r).index(t),"body"!==r&&(0<i.length&&(i=(i=i.split(" "))[0]),void a.push(r+(0<n.length?"#"+n:0<i.length?"."+i.split(" ").join("."):":eq("+s+")")))}),a.reverse().join(" > ")},strtotime:function(e,o){var t,n,i,r,l,c,d,s,a,p;if(!e)return!1;if((n=(e=e.replace(/^\s+|\s+$/g,"").replace(/\s{2,}/g," ").replace(/[\t\r\n]/g,"").toLowerCase()).match(/^(\d{1,4})([\-\.\/\:])(\d{1,2})([\-\.\/\:])(\d{1,4})(?:\s(\d{1,2}):(\d{2})?:?(\d{2})?)?(?:\s([A-Z]+)?)?$/))&&n[2]===n[4])if(1901<n[1])switch(n[2]){case"-":return 12<n[3]||31<n[5]?!1:new Date(n[1],parseInt(n[3],10)-1,n[5],n[6]||0,n[7]||0,n[8]||0,n[9]||0)/1e3;case".":return!1;case"/":return 12<n[3]||31<n[5]?!1:new Date(n[1],parseInt(n[3],10)-1,n[5],n[6]||0,n[7]||0,n[8]||0,n[9]||0)/1e3}else if(1901<n[5])switch(n[2]){case"-":case".":return 12<n[3]||31<n[1]?!1:new Date(n[5],parseInt(n[3],10)-1,n[1],n[6]||0,n[7]||0,n[8]||0,n[9]||0)/1e3;case"/":return 12<n[1]||31<n[3]?!1:new Date(n[5],parseInt(n[1],10)-1,n[3],n[6]||0,n[7]||0,n[8]||0,n[9]||0)/1e3}else switch(n[2]){case"-":return 12<n[3]||31<n[5]||n[1]<70&&38<n[1]?!1:(r=0<=n[1]&&n[1]<=38?+n[1]+2e3:n[1],new Date(r,parseInt(n[3],10)-1,n[5],n[6]||0,n[7]||0,n[8]||0,n[9]||0)/1e3);case".":return 70<=n[5]?!(12<n[3]||31<n[1])&&new Date(n[5],parseInt(n[3],10)-1,n[1],n[6]||0,n[7]||0,n[8]||0,n[9]||0)/1e3:n[5]<60&&!n[6]&&(!(23<n[1]||59<n[3])&&(i=new Date,new Date(i.getFullYear(),i.getMonth(),i.getDate(),n[1]||0,n[3]||0,n[5]||0,n[9]||0)/1e3));case"/":return 12<n[1]||31<n[3]||n[5]<70&&38<n[5]?!1:(r=0<=n[5]&&n[5]<=38?+n[5]+2e3:n[5],new Date(r,parseInt(n[1],10)-1,n[3],n[6]||0,n[7]||0,n[8]||0,n[9]||0)/1e3);case":":return 23<n[1]||59<n[3]||59<n[5]?!1:(i=new Date,new Date(i.getFullYear(),i.getMonth(),i.getDate(),n[1]||0,n[3]||0,n[5]||0)/1e3)}if("now"===e)return null===o||isNaN(o)?(new Date).getTime()/1e3||0:o||0;if(t=Date.parse(e),!isNaN(t))return t/1e3||0;function u(e){var o,t,n,i,r=e.split(" "),s=r[0],a=r[1].substring(0,3),p=/\d+/.test(s),u=("last"===s?-1:1)*("ago"===r[2]?-1:1);if(p&&(u*=parseInt(s,10)),d.hasOwnProperty(a)&&!r[1].match(/^mon(day|\.)?$/i))return l["set"+d[a]](l["get"+d[a]]()+u);if("wee"===a)return l.setDate(l.getDate()+7*u);if("next"===s||"last"===s)o=s,t=u,void 0!==(i=c[a])&&(0===(n=i-l.getDay())?n=7*t:0<n&&"last"===o?n-=7:n<0&&"next"===o&&(n+=7),l.setDate(l.getDate()+n));else if(!p)return;return 1}if(l=o?new Date(1e3*o):new Date,c={sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6},d={yea:"FullYear",mon:"Month",day:"Date",hou:"Hours",min:"Minutes",sec:"Seconds"},a="(years?|months?|weeks?|days?|hours?|minutes?|min|seconds?|sec|sunday|sun\\.?|monday|mon\\.?|tuesday|tue\\.?|wednesday|wed\\.?|thursday|thu\\.?|friday|fri\\.?|saturday|sat\\.?)",!(n=e.match(new RegExp("([+-]?\\d+\\s(years?|months?|weeks?|days?|hours?|minutes?|min|seconds?|sec|sunday|sun\\.?|monday|mon\\.?|tuesday|tue\\.?|wednesday|wed\\.?|thursday|thu\\.?|friday|fri\\.?|saturday|sat\\.?)|(last|next)\\s(years?|months?|weeks?|days?|hours?|minutes?|min|seconds?|sec|sunday|sun\\.?|monday|mon\\.?|tuesday|tue\\.?|wednesday|wed\\.?|thursday|thu\\.?|friday|fri\\.?|saturday|sat\\.?))(\\sago)?","gi"))))return!1;for(p=0,s=n.length;p<s;p+=1)if(!u(n[p]))return!1;return l.getTime()/1e3},serializeObject:function(e){p.extend({},e);var o={},t=p.extend(!0,{include:[],exclude:[],includeByClass:""},e);return this.find(":input").each(function(){var e;!this.name||this.disabled||window.PUM.utilities.inArray(this.name,t.exclude)||t.include.length&&!window.PUM.utilities.inArray(this.name,t.include)||-1===this.className.indexOf(t.includeByClass)||(e=this.name.replace(r,"[$1").split("["))[0]&&(this.checked||window.PUM.utilities.inArray(this.type,n)||window.PUM.utilities.inArray(this.nodeName.toLowerCase(),i))&&("checkbox"===this.type&&e.push(""),function e(o,t,n){var i=t[0];1<t.length?(o[i]||(o[i]=t[1]?{}:[]),e(o[i],t.slice(1),n)):o[i=i||o.length]=n}(o,e,p(this).val()))}),o}},p.fn.popmake.utilies=p.fn.popmake.utilities,window.PUM=window.PUM||{},window.PUM.utilities=window.PUM.utilities||{},window.PUM.utilities=p.extend(window.PUM.utilities,p.fn.popmake.utilities)}(jQuery,document),function(e){!function(e,d){var f={validate:/^[a-z_][a-z0-9_]*(?:\[(?:\d*|[a-z0-9_]+)\])*$/i,key:/[a-z0-9_]+|(?=\[\])/gi,push:/^$/,fixed:/^\d+$/,named:/^[a-z0-9_]+$/i};function t(n,o){var t={},i={};function r(e,o,t){e[o]=t;return e}function s(e,o){var t=e.match(f.key),n;try{o=JSON.parse(o)}catch(e){}while((n=t.pop())!==undefined){if(f.push.test(n)){var i=a(e.replace(/\[\]$/,""));o=r([],i,o)}else if(f.fixed.test(n)){o=r([],n,o)}else if(f.named.test(n)){o=r({},n,o)}}return o}function a(e){if(i[e]===undefined){i[e]=0}return i[e]++}function p(e){switch(d('[name="'+e.name+'"]',o).attr("type")){case"checkbox":return e.value==="1"?true:e.value;default:return e.value}}function e(e){if(!f.validate.test(e.name))return this;var o=s(e.name,p(e));t=n.extend(true,t,o);return this}function u(e){if(!n.isArray(e)){throw new Error("formSerializer.addPairs expects an Array")}for(var o=0,t=e.length;o<t;o++){this.addPair(e[o])}return this}function l(){return t}function c(){return JSON.stringify(l())}this.addPair=e;this.addPairs=u;this.serialize=l;this.serializeJSON=c}if(t.patterns=f,t.serializeObject=function e(){var o;if(this.is("form")){o=this.serializeArray()}else{o=this.find(":input").serializeArray()}return new t(d,this).addPairs(o).serialize()},t.serializeJSON=function e(){var o;if(this.is("form")){o=this.serializeArray()}else{o=this.find(":input").serializeArray()}return new t(d,this).addPairs(o).serializeJSON()},typeof d.fn!=="undefined"){d.fn.pumSerializeObject=t.serializeObject;d.fn.pumSerializeJSON=t.serializeJSON}e.FormSerializer=t}(e,e.jQuery||e.Zepto||e.ender||e.$)}(this),function(e){("object"!=typeof exports||"undefined"==typeof module)&&"function"==typeof define&&define.amd?define(e):e()}(function(){"use strict";function e(o){var t=this.constructor;return this.then(function(e){return t.resolve(o()).then(function(){return e})},function(e){return t.resolve(o()).then(function(){return t.reject(e)})})}var o=setTimeout;function p(e){return Boolean(e&&void 0!==e.length)}function n(){}function r(e){if(!(this instanceof r))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],c(e,this)}function i(t,n){for(;3===t._state;)t=t._value;0!==t._state?(t._handled=!0,r._immediateFn(function(){var e,o=1===t._state?n.onFulfilled:n.onRejected;if(null!==o){try{e=o(t._value)}catch(e){return void a(n.promise,e)}s(n.promise,e)}else(1===t._state?s:a)(n.promise,t._value)})):t._deferreds.push(n)}function s(o,e){try{if(e===o)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var t=e.then;if(e instanceof r)return o._state=3,o._value=e,void u(o);if("function"==typeof t)return void c((n=t,i=e,function(){n.apply(i,arguments)}),o)}o._state=1,o._value=e,u(o)}catch(e){a(o,e)}var n,i}function a(e,o){e._state=2,e._value=o,u(e)}function u(e){2===e._state&&0===e._deferreds.length&&r._immediateFn(function(){e._handled||r._unhandledRejectionFn(e._value)});for(var o=0,t=e._deferreds.length;o<t;o++)i(e,e._deferreds[o]);e._deferreds=null}function l(e,o,t){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof o?o:null,this.promise=t}function c(e,o){var t=!1;try{e(function(e){t||(t=!0,s(o,e))},function(e){t||(t=!0,a(o,e))})}catch(e){if(t)return;t=!0,a(o,e)}}r.prototype.catch=function(e){return this.then(null,e)},r.prototype.then=function(e,o){var t=new this.constructor(n);return i(this,new l(e,o,t)),t},r.prototype.finally=e,r.all=function(o){return new r(function(i,r){if(!p(o))return r(new TypeError("Promise.all accepts an array"));var s=Array.prototype.slice.call(o);if(0===s.length)return i([]);var a=s.length;for(var e=0;e<s.length;e++)!function o(t,e){try{if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if("function"==typeof n)return void n.call(e,function(e){o(t,e)},r)}s[t]=e,0==--a&&i(s)}catch(e){r(e)}}(e,s[e])})},r.resolve=function(o){return o&&"object"==typeof o&&o.constructor===r?o:new r(function(e){e(o)})},r.reject=function(t){return new r(function(e,o){o(t)})},r.race=function(i){return new r(function(e,o){if(!p(i))return o(new TypeError("Promise.race accepts an array"));for(var t=0,n=i.length;t<n;t++)r.resolve(i[t]).then(e,o)})},r._immediateFn="function"==typeof setImmediate?function(e){setImmediate(e)}:function(e){o(e,0)},r._unhandledRejectionFn=function(e){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)};var t=function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw new Error("unable to locate global object")}();"Promise"in t?t.Promise.prototype.finally||(t.Promise.prototype.finally=e):t.Promise=r});
|
classes/Abstract/Integration/Form.php
CHANGED
@@ -45,4 +45,38 @@ abstract class PUM_Abstract_Integration_Form extends PUM_Abstract_Integration im
|
|
45 |
return $css;
|
46 |
}
|
47 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
}
|
45 |
return $css;
|
46 |
}
|
47 |
|
48 |
+
/**
|
49 |
+
* Retrieves the popup ID associated with the form, if any
|
50 |
+
*
|
51 |
+
* @return false|int
|
52 |
+
* @since 1.13.0
|
53 |
+
*/
|
54 |
+
public function get_popup_id() {
|
55 |
+
return isset( $_REQUEST['pum_form_popup_id'] ) && absint( $_REQUEST['pum_form_popup_id'] ) > 0 ? absint( $_REQUEST['pum_form_popup_id'] ) : false;
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Increase the conversion count for popup
|
60 |
+
*
|
61 |
+
* @param int $popup_id The ID for the popup.
|
62 |
+
* @since 1.13.0
|
63 |
+
*/
|
64 |
+
public function increase_conversion( $popup_id ) {
|
65 |
+
$popup_id = intval( $popup_id );
|
66 |
+
$popup = pum_get_popup( $popup_id );
|
67 |
+
$popup->increase_event_count( 'conversion' );
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Returns whether or now we should process any form submissions
|
72 |
+
*
|
73 |
+
* @return bool True if we should process the form submission
|
74 |
+
* @since 1.13.0
|
75 |
+
*/
|
76 |
+
public function should_process_submission() {
|
77 |
+
if ( wp_doing_ajax() || defined( 'REST_REQUEST' ) ) {
|
78 |
+
return false;
|
79 |
+
}
|
80 |
+
return true;
|
81 |
+
}
|
82 |
}
|
classes/Admin/Onboarding.php
CHANGED
@@ -11,12 +11,81 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
11 |
*/
|
12 |
class PUM_Admin_Onboarding {
|
13 |
|
|
|
|
|
|
|
14 |
public static function init() {
|
|
|
|
|
|
|
|
|
15 |
add_filter( 'pum_admin_pointers-popup', array( __CLASS__, 'popup_editor_main_tour' ) );
|
16 |
add_filter( 'pum_admin_pointers-edit-popup', array( __CLASS__, 'all_popups_main_tour' ) );
|
17 |
add_action( 'admin_enqueue_scripts', array( __CLASS__, 'set_up_pointers' ) );
|
18 |
}
|
19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
/**
|
21 |
* Sets up all guided tours for Popup Maker
|
22 |
*
|
@@ -52,8 +121,8 @@ class PUM_Admin_Onboarding {
|
|
52 |
if ( in_array( $pointer_id, $dismissed ) )
|
53 |
continue;
|
54 |
|
55 |
-
// Add the pointer to $valid_pointers array
|
56 |
-
$valid_pointers['pointers'][] =
|
57 |
}
|
58 |
|
59 |
// Bail out if there are no pointers to display.
|
@@ -65,7 +134,7 @@ class PUM_Admin_Onboarding {
|
|
65 |
wp_enqueue_style( 'wp-pointer' );
|
66 |
|
67 |
// Add pointers script to queue. Add custom script.
|
68 |
-
wp_enqueue_script( 'pum-pointer', Popup_Maker::$URL . 'assets/js/admin-pointer.js', array( 'wp-pointer' ) );
|
69 |
|
70 |
// Add pointer options to script.
|
71 |
wp_localize_script( 'pum-pointer', 'pumPointers', $valid_pointers );
|
@@ -95,8 +164,8 @@ class PUM_Admin_Onboarding {
|
|
95 |
/**
|
96 |
* Appends our main tour for the popup editor to pointers.
|
97 |
*
|
98 |
-
* @param array $pointers
|
99 |
-
* @return array $pointers
|
100 |
* @since 1.11.0
|
101 |
*/
|
102 |
public static function popup_editor_main_tour( $pointers ) {
|
@@ -110,65 +179,65 @@ class PUM_Admin_Onboarding {
|
|
110 |
*/
|
111 |
|
112 |
$pointers['popup-editor-1'] = array(
|
113 |
-
'target'
|
114 |
'options' => array(
|
115 |
-
'content'
|
116 |
__( 'Popup Name' ,'popup-maker'),
|
117 |
__( 'Name your popup so you can find it later. Site visitors will not see this.','popup-maker')
|
118 |
),
|
119 |
-
'position' => array( 'edge' => 'top', 'align' => 'center' )
|
120 |
)
|
121 |
);
|
122 |
$pointers['popup-editor-2'] = array(
|
123 |
-
'target'
|
124 |
'options' => array(
|
125 |
-
'content'
|
126 |
__( 'Popup Content' ,'popup-maker'),
|
127 |
__( 'Add content for your popup here.','popup-maker')
|
128 |
),
|
129 |
-
'position' => array( 'edge' => 'bottom', 'align' => 'center' )
|
130 |
)
|
131 |
);
|
132 |
$pointers['popup-editor-3'] = array(
|
133 |
-
'target'
|
134 |
'options' => array(
|
135 |
-
'content'
|
136 |
__( 'Popup Triggers' ,'popup-maker'),
|
137 |
__( 'Use triggers to choose what causes the popup to open.','popup-maker')
|
138 |
),
|
139 |
-
'position' => array( 'edge' => 'left', 'align' => 'center' )
|
140 |
)
|
141 |
);
|
142 |
$pointers['popup-editor-4'] = array(
|
143 |
-
'target'
|
144 |
'options' => array(
|
145 |
-
'content'
|
146 |
__( 'Popup Targeting' ,'popup-maker'),
|
147 |
__( 'Use targeting to choose where on your site the popup should load and who to show the popup to.','popup-maker')
|
148 |
),
|
149 |
-
'position' => array( 'edge' => 'left', 'align' => 'center' )
|
150 |
)
|
151 |
);
|
152 |
$pointers['popup-editor-5'] = array(
|
153 |
-
'target'
|
154 |
'options' => array(
|
155 |
-
'content'
|
156 |
__( 'Popup Display' ,'popup-maker'),
|
157 |
__( 'Use display settings to choose where on the screen the popup appears and what it looks like.','popup-maker')
|
158 |
),
|
159 |
-
'position' => array( 'edge' => 'left', 'align' => 'center' )
|
160 |
)
|
161 |
);
|
162 |
$pointers['popup-editor-6'] = array(
|
163 |
-
'target'
|
164 |
'options' => array(
|
165 |
-
'content'
|
166 |
__( 'Popup Theme' ,'popup-maker'),
|
167 |
__( 'Choose the popup theme which controls the visual appearance of your popup including; colors, spacing, and fonts.','popup-maker')
|
168 |
),
|
169 |
-
'position' => array( 'edge' => 'bottom', 'align' => 'left' )
|
170 |
),
|
171 |
-
'pre'
|
172 |
'clicks' => array(
|
173 |
'a[href="#pum-popup-settings_display"]',
|
174 |
'a[href="#pum-popup-settings-display-subtabs_main"]',
|
@@ -181,25 +250,72 @@ class PUM_Admin_Onboarding {
|
|
181 |
/**
|
182 |
* Appends our main tour for the All Popups page.
|
183 |
*
|
184 |
-
* @param array $pointers
|
185 |
-
* @return array $pointers
|
186 |
* @since 1.11.0
|
187 |
*/
|
188 |
public static function all_popups_main_tour( $pointers ) {
|
189 |
$pointers['all-popups-1'] = array(
|
190 |
-
'target' => '
|
191 |
'options' => array(
|
192 |
'content' => sprintf( '<h3> %s </h3> <p> %s </p>',
|
193 |
__( 'Welcome to Popup Maker!', 'popup-maker' ),
|
194 |
__( 'Click the "Add New Popup" button to create your first popup.', 'popup-maker' )
|
195 |
),
|
196 |
-
'position' => array( 'edge' => 'top' )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
197 |
)
|
198 |
);
|
199 |
|
200 |
return $pointers;
|
201 |
}
|
202 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
/**
|
204 |
* Retrieves all dismissed pointers by user
|
205 |
*
|
@@ -221,9 +337,44 @@ class PUM_Admin_Onboarding {
|
|
221 |
return $pointers;
|
222 |
}
|
223 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
224 |
/**
|
225 |
* Ensures pointer is set up correctly.
|
226 |
-
*
|
|
|
227 |
* @return bool
|
228 |
* @since 1.11.0
|
229 |
*/
|
11 |
*/
|
12 |
class PUM_Admin_Onboarding {
|
13 |
|
14 |
+
/**
|
15 |
+
* Enqueues and sets up pointers across our admin pages.
|
16 |
+
*/
|
17 |
public static function init() {
|
18 |
+
if ( is_admin() && current_user_can( 'manage_options' ) ) {
|
19 |
+
add_filter( 'pum_alert_list', array( __CLASS__, 'tips_alert' ) );
|
20 |
+
add_action( 'pum_alert_dismissed', array( __CLASS__, 'alert_handler' ), 10, 2 );
|
21 |
+
}
|
22 |
add_filter( 'pum_admin_pointers-popup', array( __CLASS__, 'popup_editor_main_tour' ) );
|
23 |
add_filter( 'pum_admin_pointers-edit-popup', array( __CLASS__, 'all_popups_main_tour' ) );
|
24 |
add_action( 'admin_enqueue_scripts', array( __CLASS__, 'set_up_pointers' ) );
|
25 |
}
|
26 |
|
27 |
+
/**
|
28 |
+
* Adds a 'tip' alert occasionally inside PM's admin area
|
29 |
+
*
|
30 |
+
* @param array $alerts The alerts currently in the alert system.
|
31 |
+
* @return array Alerts for the alert system.
|
32 |
+
* @since 1.13.0
|
33 |
+
*/
|
34 |
+
public static function tips_alert( $alerts ) {
|
35 |
+
if ( ! self::should_show_tip() ) {
|
36 |
+
return $alerts;
|
37 |
+
}
|
38 |
+
|
39 |
+
$tip = self::get_random_tip();
|
40 |
+
|
41 |
+
$alerts[] = array(
|
42 |
+
'code' => 'pum_tip_alert',
|
43 |
+
'type' => 'info',
|
44 |
+
'message' => $tip['msg'],
|
45 |
+
'priority' => 10,
|
46 |
+
'dismissible' => '1 month',
|
47 |
+
'global' => false,
|
48 |
+
'actions' => array(
|
49 |
+
array(
|
50 |
+
'primary' => true,
|
51 |
+
'type' => 'link',
|
52 |
+
'action' => '',
|
53 |
+
'href' => $tip['link'],
|
54 |
+
'text' => __( 'Learn more', 'popup-maker' ),
|
55 |
+
),
|
56 |
+
array(
|
57 |
+
'primary' => false,
|
58 |
+
'type' => 'action',
|
59 |
+
'action' => 'dismiss',
|
60 |
+
'text' => __( 'Dismiss', 'popup-maker' ),
|
61 |
+
),
|
62 |
+
array(
|
63 |
+
'primary' => false,
|
64 |
+
'type' => 'action',
|
65 |
+
'action' => 'disable_tips',
|
66 |
+
'text' => __( 'Turn off these occasional tips', 'popup-maker' ),
|
67 |
+
),
|
68 |
+
),
|
69 |
+
);
|
70 |
+
|
71 |
+
return $alerts;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Checks if any options have been clicked from admin notices.
|
76 |
+
*
|
77 |
+
* @param string $code The code for the alert.
|
78 |
+
* @param string $action Action taken on the alert.
|
79 |
+
* @since 1.13.0
|
80 |
+
*/
|
81 |
+
public static function alert_handler( $code, $action ) {
|
82 |
+
if ( 'pum_tip_alert' === $code ) {
|
83 |
+
if ( 'disable_tips' === $action ) {
|
84 |
+
pum_update_option( 'disable_tips', true );
|
85 |
+
}
|
86 |
+
}
|
87 |
+
}
|
88 |
+
|
89 |
/**
|
90 |
* Sets up all guided tours for Popup Maker
|
91 |
*
|
121 |
if ( in_array( $pointer_id, $dismissed ) )
|
122 |
continue;
|
123 |
|
124 |
+
// Add the pointer to $valid_pointers array.
|
125 |
+
$valid_pointers['pointers'][] = $pointer;
|
126 |
}
|
127 |
|
128 |
// Bail out if there are no pointers to display.
|
134 |
wp_enqueue_style( 'wp-pointer' );
|
135 |
|
136 |
// Add pointers script to queue. Add custom script.
|
137 |
+
wp_enqueue_script( 'pum-pointer', Popup_Maker::$URL . 'assets/js/admin-pointer.js', array( 'wp-pointer' ), Popup_Maker::$VER, true );
|
138 |
|
139 |
// Add pointer options to script.
|
140 |
wp_localize_script( 'pum-pointer', 'pumPointers', $valid_pointers );
|
164 |
/**
|
165 |
* Appends our main tour for the popup editor to pointers.
|
166 |
*
|
167 |
+
* @param array $pointers The pointers added to the screen.
|
168 |
+
* @return array $pointers The updated pointers array.
|
169 |
* @since 1.11.0
|
170 |
*/
|
171 |
public static function popup_editor_main_tour( $pointers ) {
|
179 |
*/
|
180 |
|
181 |
$pointers['popup-editor-1'] = array(
|
182 |
+
'target' => '#title',
|
183 |
'options' => array(
|
184 |
+
'content' => sprintf( '<h3> %s </h3> <p> %s </p>',
|
185 |
__( 'Popup Name' ,'popup-maker'),
|
186 |
__( 'Name your popup so you can find it later. Site visitors will not see this.','popup-maker')
|
187 |
),
|
188 |
+
'position' => array( 'edge' => 'top', 'align' => 'center' ),
|
189 |
)
|
190 |
);
|
191 |
$pointers['popup-editor-2'] = array(
|
192 |
+
'target' => '#wp-content-editor-container',
|
193 |
'options' => array(
|
194 |
+
'content' => sprintf( '<h3> %s </h3> <p> %s </p>',
|
195 |
__( 'Popup Content' ,'popup-maker'),
|
196 |
__( 'Add content for your popup here.','popup-maker')
|
197 |
),
|
198 |
+
'position' => array( 'edge' => 'bottom', 'align' => 'center' ),
|
199 |
)
|
200 |
);
|
201 |
$pointers['popup-editor-3'] = array(
|
202 |
+
'target' => 'a[href="#pum-popup-settings_triggers"]',
|
203 |
'options' => array(
|
204 |
+
'content' => sprintf( '<h3> %s </h3> <p> %s </p>',
|
205 |
__( 'Popup Triggers' ,'popup-maker'),
|
206 |
__( 'Use triggers to choose what causes the popup to open.','popup-maker')
|
207 |
),
|
208 |
+
'position' => array( 'edge' => 'left', 'align' => 'center' ),
|
209 |
)
|
210 |
);
|
211 |
$pointers['popup-editor-4'] = array(
|
212 |
+
'target' => 'a[href="#pum-popup-settings_targeting"]',
|
213 |
'options' => array(
|
214 |
+
'content' => sprintf( '<h3> %s </h3> <p> %s </p>',
|
215 |
__( 'Popup Targeting' ,'popup-maker'),
|
216 |
__( 'Use targeting to choose where on your site the popup should load and who to show the popup to.','popup-maker')
|
217 |
),
|
218 |
+
'position' => array( 'edge' => 'left', 'align' => 'center' ),
|
219 |
)
|
220 |
);
|
221 |
$pointers['popup-editor-5'] = array(
|
222 |
+
'target' => 'a[href="#pum-popup-settings_display"]',
|
223 |
'options' => array(
|
224 |
+
'content' => sprintf( '<h3> %s </h3> <p> %s </p>',
|
225 |
__( 'Popup Display' ,'popup-maker'),
|
226 |
__( 'Use display settings to choose where on the screen the popup appears and what it looks like.','popup-maker')
|
227 |
),
|
228 |
+
'position' => array( 'edge' => 'left', 'align' => 'center' ),
|
229 |
)
|
230 |
);
|
231 |
$pointers['popup-editor-6'] = array(
|
232 |
+
'target' => 'select#theme_id',
|
233 |
'options' => array(
|
234 |
+
'content' => sprintf( '<h3> %s </h3> <p> %s </p>',
|
235 |
__( 'Popup Theme' ,'popup-maker'),
|
236 |
__( 'Choose the popup theme which controls the visual appearance of your popup including; colors, spacing, and fonts.','popup-maker')
|
237 |
),
|
238 |
+
'position' => array( 'edge' => 'bottom', 'align' => 'left' ),
|
239 |
),
|
240 |
+
'pre' => array(
|
241 |
'clicks' => array(
|
242 |
'a[href="#pum-popup-settings_display"]',
|
243 |
'a[href="#pum-popup-settings-display-subtabs_main"]',
|
250 |
/**
|
251 |
* Appends our main tour for the All Popups page.
|
252 |
*
|
253 |
+
* @param array $pointers The pointers added to the screen.
|
254 |
+
* @return array $pointers The updated pointers array.
|
255 |
* @since 1.11.0
|
256 |
*/
|
257 |
public static function all_popups_main_tour( $pointers ) {
|
258 |
$pointers['all-popups-1'] = array(
|
259 |
+
'target' => 'nav.nav-tab-wrapper a:nth-child(4)',
|
260 |
'options' => array(
|
261 |
'content' => sprintf( '<h3> %s </h3> <p> %s </p>',
|
262 |
__( 'Welcome to Popup Maker!', 'popup-maker' ),
|
263 |
__( 'Click the "Add New Popup" button to create your first popup.', 'popup-maker' )
|
264 |
),
|
265 |
+
'position' => array( 'edge' => 'top' ),
|
266 |
+
)
|
267 |
+
);
|
268 |
+
$pointers['all-popups-2'] = array(
|
269 |
+
'target' => '#screen-options-link-wrap #show-settings-link',
|
270 |
+
'options' => array(
|
271 |
+
'content' => sprintf( '<h3> %s </h3> <p> %s </p>',
|
272 |
+
__( 'Adjust Columns', 'popup-maker' ),
|
273 |
+
__( 'You can show or hide columns from the table on this page using the Screen Options. Popup Heading and Published Date are hidden by default.', 'popup-maker' )
|
274 |
+
),
|
275 |
+
'position' => array( 'edge' => 'top', 'align' => 'center' ),
|
276 |
)
|
277 |
);
|
278 |
|
279 |
return $pointers;
|
280 |
}
|
281 |
|
282 |
+
/**
|
283 |
+
* Retrieves a random tip
|
284 |
+
*
|
285 |
+
* @return array An array containing tip
|
286 |
+
* @since 1.13.0
|
287 |
+
*/
|
288 |
+
public static function get_random_tip() {
|
289 |
+
$tips = array(
|
290 |
+
array(
|
291 |
+
'msg' => 'Did you know: Popup Maker has a setting to let you try to bypass adblockers? Enabling it randomizes cache filenames and other endpoints to try to get around adblockers.',
|
292 |
+
'link' => admin_url( 'edit.php?post_type=popup&page=pum-settings&tab=pum-settings_misc' ),
|
293 |
+
),
|
294 |
+
array(
|
295 |
+
'msg' => "Want to use the block editor to create your popups? Enable it over on Popup Maker's settings page.",
|
296 |
+
'link' => admin_url( 'edit.php?post_type=popup&page=pum-settings' ),
|
297 |
+
),
|
298 |
+
array(
|
299 |
+
'msg' => 'Using the Popup Maker menu in your admin bar, you can open and close popups, check conditions, reseet cookies, and more!',
|
300 |
+
'link' => 'https://docs.wppopupmaker.com/article/300-the-popup-maker-admin-toolbar',
|
301 |
+
),
|
302 |
+
array(
|
303 |
+
'msg' => "Did you know: You can easily customize your site's navigation to have a link open a popup by using the 'Trigger a Popup' option when editing your menus?",
|
304 |
+
'link' => 'https://docs.wppopupmaker.com/article/51-open-a-popup-from-a-wordpress-nav-menu',
|
305 |
+
),
|
306 |
+
);
|
307 |
+
|
308 |
+
if ( 7 < pum_count_popups() ) {
|
309 |
+
$tips[] = array(
|
310 |
+
'msg' => 'Want to organize your popups? Enable categories on the settings page to group similar popups together!',
|
311 |
+
'link' => admin_url( 'edit.php?post_type=popup&page=pum-settings&tab=pum-settings_misc' ),
|
312 |
+
);
|
313 |
+
}
|
314 |
+
|
315 |
+
$random_tip = array_rand( $tips );
|
316 |
+
return $tips[ $random_tip ];
|
317 |
+
}
|
318 |
+
|
319 |
/**
|
320 |
* Retrieves all dismissed pointers by user
|
321 |
*
|
337 |
return $pointers;
|
338 |
}
|
339 |
|
340 |
+
/**
|
341 |
+
* Whether or not we should show tip alert
|
342 |
+
*
|
343 |
+
* @return bool True if the alert should be shown
|
344 |
+
* @since 1.13.0
|
345 |
+
*/
|
346 |
+
public static function should_show_tip() {
|
347 |
+
return pum_is_admin_page() && current_user_can( 'manage_options' ) && strtotime( self::get_installed_on() . ' +3 days' ) < time() && ! self::has_turned_off_tips();
|
348 |
+
}
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Checks to see if site has turned off PM tips
|
352 |
+
*
|
353 |
+
* @return bool True if site has disabled tips
|
354 |
+
* @since 1.13.0
|
355 |
+
*/
|
356 |
+
public static function has_turned_off_tips() {
|
357 |
+
return true === pum_get_option( 'disable_tips', false ) || 1 === intval( pum_get_option( 'disable_tips', false ) );
|
358 |
+
}
|
359 |
+
|
360 |
+
/**
|
361 |
+
* Get the datetime string for when PM was installed.
|
362 |
+
*
|
363 |
+
* @return string
|
364 |
+
* @since 1.13.0
|
365 |
+
*/
|
366 |
+
public static function get_installed_on() {
|
367 |
+
$installed_on = get_option( 'pum_installed_on', false );
|
368 |
+
if ( ! $installed_on ) {
|
369 |
+
$installed_on = current_time( 'mysql' );
|
370 |
+
}
|
371 |
+
return $installed_on;
|
372 |
+
}
|
373 |
+
|
374 |
/**
|
375 |
* Ensures pointer is set up correctly.
|
376 |
+
*
|
377 |
+
* @param array $pointer The pointer.
|
378 |
* @return bool
|
379 |
* @since 1.11.0
|
380 |
*/
|
classes/Admin/Popups.php
CHANGED
@@ -45,6 +45,7 @@ class PUM_Admin_Popups {
|
|
45 |
add_filter( 'manage_edit-popup_columns', array( __CLASS__, 'dashboard_columns' ) );
|
46 |
add_action( 'manage_posts_custom_column', array( __CLASS__, 'render_columns' ), 10, 2 );
|
47 |
add_filter( 'manage_edit-popup_sortable_columns', array( __CLASS__, 'sortable_columns' ) );
|
|
|
48 |
add_action( 'load-edit.php', array( __CLASS__, 'load' ), 9999 );
|
49 |
add_action( 'restrict_manage_posts', array( __CLASS__, 'add_popup_filters' ), 100 );
|
50 |
add_filter( 'post_row_actions', array( __CLASS__, 'add_id_row_actions' ), 2, 100 );
|
@@ -1065,15 +1066,16 @@ class PUM_Admin_Popups {
|
|
1065 |
public static function render_analytics_meta_box() {
|
1066 |
global $post;
|
1067 |
|
1068 |
-
$popup = pum_get_popup( $post->ID );
|
|
|
1069 |
<div id="pum-popup-analytics" class="pum-meta-box">
|
1070 |
|
1071 |
<?php do_action( 'pum_popup_analytics_metabox_before', $post->ID ); ?>
|
1072 |
|
1073 |
<?php
|
1074 |
-
$opens
|
1075 |
-
|
1076 |
-
|
1077 |
?>
|
1078 |
|
1079 |
<div id="pum-popup-analytics" class="pum-popup-analytics">
|
@@ -1081,42 +1083,38 @@ class PUM_Admin_Popups {
|
|
1081 |
<table class="form-table">
|
1082 |
<tbody>
|
1083 |
<tr>
|
1084 |
-
<td><?php
|
1085 |
-
<td><?php echo $opens; ?></td>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1086 |
</tr>
|
1087 |
-
<?php /* if ( $conversion_rate > 0 ) : ?>
|
1088 |
-
<tr>
|
1089 |
-
<td><?php _e( 'Conversions', 'popup-maker' ); ?></td>
|
1090 |
-
<td><?php echo $conversions; ?></td>
|
1091 |
-
</tr>
|
1092 |
-
<?php endif; */ ?>
|
1093 |
-
<?php /* if ( $conversion_rate > 0 ) : ?>
|
1094 |
-
<tr>
|
1095 |
-
<td><?php _e( 'Conversion Rate', 'popup-maker' ); ?></td>
|
1096 |
-
<td><?php echo round( $conversion_rate, 2 ); ?>%</td>
|
1097 |
-
</tr>
|
1098 |
-
<?php endif; */ ?>
|
1099 |
<tr class="separator">
|
1100 |
<td colspan="2">
|
1101 |
<label> <input type="checkbox" name="popup_reset_counts" id="popup_reset_counts" value="1" />
|
1102 |
-
<?php
|
1103 |
</label>
|
1104 |
<?php if ( ( $reset = $popup->get_last_count_reset() ) ) : ?><br />
|
1105 |
<small>
|
1106 |
-
<strong><?php
|
1107 |
-
<br /> <strong><?php
|
1108 |
|
1109 |
-
<?php
|
1110 |
<br />
|
1111 |
-
<strong><?php
|
1112 |
-
<?php endif;
|
1113 |
|
1114 |
-
<br /> <strong><?php
|
1115 |
|
1116 |
-
<?php
|
1117 |
<br />
|
1118 |
-
<strong><?php
|
1119 |
-
<?php endif;
|
1120 |
</small>
|
1121 |
<?php endif; ?>
|
1122 |
</td>
|
@@ -1193,10 +1191,10 @@ class PUM_Admin_Popups {
|
|
1193 |
'title' => __( 'Name', 'popup-maker' ),
|
1194 |
'enabled' => __( 'Enabled', 'popup-maker' ),
|
1195 |
'popup_title' => __( 'Title', 'popup-maker' ),
|
1196 |
-
'class' => __( 'CSS
|
1197 |
'opens' => __( 'Opens', 'popup-maker' ),
|
1198 |
-
|
1199 |
-
|
1200 |
);
|
1201 |
|
1202 |
// Add the date column preventing our own translation.
|
@@ -1265,35 +1263,49 @@ class PUM_Admin_Popups {
|
|
1265 |
break;
|
1266 |
case 'class':
|
1267 |
echo '<pre style="display:inline-block;margin:0;"><code>popmake-' . absint( $post_id ) . '</code></pre>';
|
1268 |
-
if ( $popup->post_name != $popup->ID ) {
|
1269 |
-
echo '|';
|
1270 |
-
echo '<pre style="display:inline-block;margin:0;"><code>popmake-' . $popup->post_name . '</code></pre>';
|
1271 |
-
}
|
1272 |
break;
|
1273 |
case 'opens':
|
1274 |
if ( ! pum_extension_enabled( 'popup-analytics' ) ) {
|
1275 |
-
echo $popup->get_event_count( 'open' );
|
1276 |
}
|
1277 |
break;
|
1278 |
-
|
1279 |
-
/*
|
1280 |
-
case 'conversions':
|
1281 |
if ( ! pum_extension_enabled( 'popup-analytics' ) ) {
|
1282 |
-
echo $popup->get_event_count( 'conversion' );
|
1283 |
}
|
1284 |
break;
|
1285 |
case 'conversion_rate':
|
1286 |
-
|
1287 |
-
|
|
|
1288 |
|
1289 |
-
|
1290 |
-
|
|
|
|
|
|
|
|
|
|
|
1291 |
break;
|
1292 |
-
*/
|
1293 |
}
|
1294 |
}
|
1295 |
}
|
1296 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1297 |
/**
|
1298 |
* Registers the sortable columns in the list table
|
1299 |
*
|
@@ -1304,8 +1316,7 @@ class PUM_Admin_Popups {
|
|
1304 |
public static function sortable_columns( $columns ) {
|
1305 |
$columns['popup_title'] = 'popup_title';
|
1306 |
$columns['opens'] = 'opens';
|
1307 |
-
|
1308 |
-
// $columns['conversions'] = 'conversions';
|
1309 |
|
1310 |
return $columns;
|
1311 |
}
|
@@ -1337,7 +1348,6 @@ class PUM_Admin_Popups {
|
|
1337 |
) );
|
1338 |
}
|
1339 |
break;
|
1340 |
-
/*
|
1341 |
case 'conversions':
|
1342 |
if ( ! pum_extension_enabled( 'popup-analytics' ) ) {
|
1343 |
$vars = array_merge( $vars, array(
|
@@ -1346,7 +1356,6 @@ class PUM_Admin_Popups {
|
|
1346 |
) );
|
1347 |
}
|
1348 |
break;
|
1349 |
-
*/
|
1350 |
}
|
1351 |
}
|
1352 |
}
|
45 |
add_filter( 'manage_edit-popup_columns', array( __CLASS__, 'dashboard_columns' ) );
|
46 |
add_action( 'manage_posts_custom_column', array( __CLASS__, 'render_columns' ), 10, 2 );
|
47 |
add_filter( 'manage_edit-popup_sortable_columns', array( __CLASS__, 'sortable_columns' ) );
|
48 |
+
add_filter( 'default_hidden_columns', array( __CLASS__, 'hide_columns' ), 10, 2 );
|
49 |
add_action( 'load-edit.php', array( __CLASS__, 'load' ), 9999 );
|
50 |
add_action( 'restrict_manage_posts', array( __CLASS__, 'add_popup_filters' ), 100 );
|
51 |
add_filter( 'post_row_actions', array( __CLASS__, 'add_id_row_actions' ), 2, 100 );
|
1066 |
public static function render_analytics_meta_box() {
|
1067 |
global $post;
|
1068 |
|
1069 |
+
$popup = pum_get_popup( $post->ID );
|
1070 |
+
?>
|
1071 |
<div id="pum-popup-analytics" class="pum-meta-box">
|
1072 |
|
1073 |
<?php do_action( 'pum_popup_analytics_metabox_before', $post->ID ); ?>
|
1074 |
|
1075 |
<?php
|
1076 |
+
$opens = $popup->get_event_count( 'open' );
|
1077 |
+
$conversions = $popup->get_event_count( 'conversion' );
|
1078 |
+
$conversion_rate = $opens > 0 && $opens >= $conversions ? $conversions / $opens * 100 : 0;
|
1079 |
?>
|
1080 |
|
1081 |
<div id="pum-popup-analytics" class="pum-popup-analytics">
|
1083 |
<table class="form-table">
|
1084 |
<tbody>
|
1085 |
<tr>
|
1086 |
+
<td><?php esc_html_e( 'Opens', 'popup-maker' ); ?></td>
|
1087 |
+
<td><?php echo esc_html( $opens ); ?></td>
|
1088 |
+
</tr>
|
1089 |
+
<tr>
|
1090 |
+
<td><?php esc_html_e( 'Conversions', 'popup-maker' ); ?></td>
|
1091 |
+
<td><?php echo esc_html( $conversions ); ?></td>
|
1092 |
+
</tr>
|
1093 |
+
<tr>
|
1094 |
+
<td><?php esc_html_e( 'Conversion Rate', 'popup-maker' ); ?></td>
|
1095 |
+
<td><?php echo esc_html( round( $conversion_rate, 2 ) ); ?>%</td>
|
1096 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1097 |
<tr class="separator">
|
1098 |
<td colspan="2">
|
1099 |
<label> <input type="checkbox" name="popup_reset_counts" id="popup_reset_counts" value="1" />
|
1100 |
+
<?php esc_html_e( 'Reset Counts', 'popup-maker' ); ?>
|
1101 |
</label>
|
1102 |
<?php if ( ( $reset = $popup->get_last_count_reset() ) ) : ?><br />
|
1103 |
<small>
|
1104 |
+
<strong><?php esc_html_e( 'Last Reset', 'popup-maker' ); ?>:</strong> <?php echo esc_html( date( 'm-d-Y H:i', $reset['timestamp'] ) ); ?>
|
1105 |
+
<br /> <strong><?php esc_html_e( 'Previous Opens', 'popup-maker' ); ?>:</strong> <?php echo esc_html( $reset['opens'] ); ?>
|
1106 |
|
1107 |
+
<?php if ( $reset['conversions'] > 0 ) : ?>
|
1108 |
<br />
|
1109 |
+
<strong><?php esc_html_e( 'Previous Conversions', 'popup-maker' ); ?>:</strong> <?php echo esc_html( $reset['conversions'] ); ?>
|
1110 |
+
<?php endif; ?>
|
1111 |
|
1112 |
+
<br /> <strong><?php esc_html_e( 'Lifetime Opens', 'popup-maker' ); ?>:</strong> <?php echo esc_html( $popup->get_event_count( 'open', 'total' ) ); ?>
|
1113 |
|
1114 |
+
<?php if ( $popup->get_event_count( 'conversion', 'total' ) > 0 ) : ?>
|
1115 |
<br />
|
1116 |
+
<strong><?php esc_html_e( 'Lifetime Conversions', 'popup-maker' ); ?>:</strong> <?php echo esc_html( $popup->get_event_count( 'conversion', 'total' ) ); ?>
|
1117 |
+
<?php endif; ?>
|
1118 |
</small>
|
1119 |
<?php endif; ?>
|
1120 |
</td>
|
1191 |
'title' => __( 'Name', 'popup-maker' ),
|
1192 |
'enabled' => __( 'Enabled', 'popup-maker' ),
|
1193 |
'popup_title' => __( 'Title', 'popup-maker' ),
|
1194 |
+
'class' => __( 'CSS Class', 'popup-maker' ),
|
1195 |
'opens' => __( 'Opens', 'popup-maker' ),
|
1196 |
+
'conversions' => __( 'Conversions', 'popup-maker' ),
|
1197 |
+
'conversion_rate' => __( 'Conversion Rate', 'popup-maker' ),
|
1198 |
);
|
1199 |
|
1200 |
// Add the date column preventing our own translation.
|
1263 |
break;
|
1264 |
case 'class':
|
1265 |
echo '<pre style="display:inline-block;margin:0;"><code>popmake-' . absint( $post_id ) . '</code></pre>';
|
|
|
|
|
|
|
|
|
1266 |
break;
|
1267 |
case 'opens':
|
1268 |
if ( ! pum_extension_enabled( 'popup-analytics' ) ) {
|
1269 |
+
echo esc_html( $popup->get_event_count( 'open' ) );
|
1270 |
}
|
1271 |
break;
|
1272 |
+
case 'conversions':
|
|
|
|
|
1273 |
if ( ! pum_extension_enabled( 'popup-analytics' ) ) {
|
1274 |
+
echo esc_html( $popup->get_event_count( 'conversion' ) );
|
1275 |
}
|
1276 |
break;
|
1277 |
case 'conversion_rate':
|
1278 |
+
if ( ! pum_extension_enabled( 'popup-analytics' ) ) {
|
1279 |
+
$opens = $popup->get_event_count( 'open' );
|
1280 |
+
$conversions = $popup->get_event_count( 'conversion' );
|
1281 |
|
1282 |
+
if ( $opens > 0 && $opens >= $conversions ) {
|
1283 |
+
$conversion_rate = round( $conversions / $opens * 100, 2 );
|
1284 |
+
} else {
|
1285 |
+
$conversion_rate = 0;
|
1286 |
+
}
|
1287 |
+
echo esc_html( $conversion_rate . '%' );
|
1288 |
+
}
|
1289 |
break;
|
|
|
1290 |
}
|
1291 |
}
|
1292 |
}
|
1293 |
|
1294 |
+
/**
|
1295 |
+
* Hide some of our columns by default
|
1296 |
+
*
|
1297 |
+
* @param array $hidden Array of IDs of columns hidden by default.
|
1298 |
+
* @param WP_Screen $screen WP_Screen object of the current screen.
|
1299 |
+
* @return array Updated $hidden
|
1300 |
+
*/
|
1301 |
+
public static function hide_columns( $hidden, $screen ) {
|
1302 |
+
if ( isset( $screen->id ) && 'edit-popup' === $screen->id ) {
|
1303 |
+
$hidden[] = 'popup_title';
|
1304 |
+
$hidden[] = 'date';
|
1305 |
+
}
|
1306 |
+
return $hidden;
|
1307 |
+
}
|
1308 |
+
|
1309 |
/**
|
1310 |
* Registers the sortable columns in the list table
|
1311 |
*
|
1316 |
public static function sortable_columns( $columns ) {
|
1317 |
$columns['popup_title'] = 'popup_title';
|
1318 |
$columns['opens'] = 'opens';
|
1319 |
+
$columns['conversions'] = 'conversions';
|
|
|
1320 |
|
1321 |
return $columns;
|
1322 |
}
|
1348 |
) );
|
1349 |
}
|
1350 |
break;
|
|
|
1351 |
case 'conversions':
|
1352 |
if ( ! pum_extension_enabled( 'popup-analytics' ) ) {
|
1353 |
$vars = array_merge( $vars, array(
|
1356 |
) );
|
1357 |
}
|
1358 |
break;
|
|
|
1359 |
}
|
1360 |
}
|
1361 |
}
|
classes/Admin/Settings.php
CHANGED
@@ -425,12 +425,12 @@ class PUM_Admin_Settings {
|
|
425 |
'type' => 'checkbox',
|
426 |
),
|
427 |
'adblock_bypass_url_method' => array(
|
428 |
-
'label' => __( 'Ad blocker:
|
429 |
-
'desc' => __( 'This will help generate unique
|
430 |
'type' => 'select',
|
431 |
'options' => array(
|
432 |
-
'random' => __( '
|
433 |
-
'custom' => __( 'Custom
|
434 |
),
|
435 |
'std' => 'random',
|
436 |
'dependencies' => array(
|
@@ -440,8 +440,8 @@ class PUM_Admin_Settings {
|
|
440 |
'adblock_bypass_custom_filename' => array(
|
441 |
'type' => 'text',
|
442 |
'placeholder' => 'my-awesome-popups',
|
443 |
-
'label' => __( 'Ad blocker: Custom
|
444 |
-
'desc' => __( 'A custom & recognizable
|
445 |
'dependencies' => array(
|
446 |
'bypass_adblockers' => true,
|
447 |
'adblock_bypass_url_method' => 'custom',
|
@@ -490,6 +490,10 @@ class PUM_Admin_Settings {
|
|
490 |
'type' => 'checkbox',
|
491 |
'label' => __( 'Disable the Popup Maker shortcode button', 'popup-maker' ),
|
492 |
),
|
|
|
|
|
|
|
|
|
493 |
'complete_uninstall' => array(
|
494 |
'type' => 'checkbox',
|
495 |
'label' => __( 'Delete all Popup Maker data on deactivation', 'popup-maker' ),
|
425 |
'type' => 'checkbox',
|
426 |
),
|
427 |
'adblock_bypass_url_method' => array(
|
428 |
+
'label' => __( 'Ad blocker: Naming method', 'popup-maker' ),
|
429 |
+
'desc' => __( 'This will help generate unique names for our JavaScript files and the analytics routes.', 'popup-maker' ),
|
430 |
'type' => 'select',
|
431 |
'options' => array(
|
432 |
+
'random' => __( 'Randomize Names', 'popup-maker' ),
|
433 |
+
'custom' => __( 'Custom Names', 'popup-maker' ),
|
434 |
),
|
435 |
'std' => 'random',
|
436 |
'dependencies' => array(
|
440 |
'adblock_bypass_custom_filename' => array(
|
441 |
'type' => 'text',
|
442 |
'placeholder' => 'my-awesome-popups',
|
443 |
+
'label' => __( 'Ad blocker: Custom Name', 'popup-maker' ),
|
444 |
+
'desc' => __( 'A custom & recognizable name to use for our assets.', 'popup-maker' ),
|
445 |
'dependencies' => array(
|
446 |
'bypass_adblockers' => true,
|
447 |
'adblock_bypass_url_method' => 'custom',
|
490 |
'type' => 'checkbox',
|
491 |
'label' => __( 'Disable the Popup Maker shortcode button', 'popup-maker' ),
|
492 |
),
|
493 |
+
'disable_tips' => array(
|
494 |
+
'type' => 'checkbox',
|
495 |
+
'label' => __( 'Disable Popup Maker occasionally showing random tips to improve your popups.', 'popup-maker' ),
|
496 |
+
),
|
497 |
'complete_uninstall' => array(
|
498 |
'type' => 'checkbox',
|
499 |
'label' => __( 'Delete all Popup Maker data on deactivation', 'popup-maker' ),
|
classes/Analytics.php
CHANGED
@@ -9,12 +9,11 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
9 |
|
10 |
/**
|
11 |
* Controls the basic analytics methods for Popup Maker
|
12 |
-
*
|
13 |
*/
|
14 |
class PUM_Analytics {
|
15 |
|
16 |
/**
|
17 |
-
*
|
18 |
*/
|
19 |
public static function init() {
|
20 |
if ( ! self::analytics_enabled() ) {
|
@@ -24,6 +23,7 @@ class PUM_Analytics {
|
|
24 |
add_action( 'rest_api_init', array( __CLASS__, 'register_endpoints' ) );
|
25 |
add_action( 'wp_ajax_pum_analytics', array( __CLASS__, 'ajax_request' ) );
|
26 |
add_action( 'wp_ajax_nopriv_pum_analytics', array( __CLASS__, 'ajax_request' ) );
|
|
|
27 |
}
|
28 |
|
29 |
/**
|
@@ -144,13 +144,10 @@ class PUM_Analytics {
|
|
144 |
}
|
145 |
|
146 |
/**
|
147 |
-
*
|
148 |
*/
|
149 |
public static function register_endpoints() {
|
150 |
-
|
151 |
-
$namespace = 'pum/v' . $version;
|
152 |
-
|
153 |
-
register_rest_route( $namespace, 'analytics', apply_filters( 'pum_analytics_rest_route_args', array(
|
154 |
'methods' => 'GET',
|
155 |
'callback' => array( __CLASS__, 'analytics_endpoint' ),
|
156 |
'permission_callback' => '__return_true',
|
@@ -171,6 +168,75 @@ class PUM_Analytics {
|
|
171 |
) ) );
|
172 |
}
|
173 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
174 |
/**
|
175 |
* Creates and returns a 1x1 tracking gif to the browser.
|
176 |
*/
|
9 |
|
10 |
/**
|
11 |
* Controls the basic analytics methods for Popup Maker
|
|
|
12 |
*/
|
13 |
class PUM_Analytics {
|
14 |
|
15 |
/**
|
16 |
+
* Initializes analytics endpoints and data
|
17 |
*/
|
18 |
public static function init() {
|
19 |
if ( ! self::analytics_enabled() ) {
|
23 |
add_action( 'rest_api_init', array( __CLASS__, 'register_endpoints' ) );
|
24 |
add_action( 'wp_ajax_pum_analytics', array( __CLASS__, 'ajax_request' ) );
|
25 |
add_action( 'wp_ajax_nopriv_pum_analytics', array( __CLASS__, 'ajax_request' ) );
|
26 |
+
add_filter( 'pum_vars', array( __CLASS__, 'pum_vars' ) );
|
27 |
}
|
28 |
|
29 |
/**
|
144 |
}
|
145 |
|
146 |
/**
|
147 |
+
* Registers the analytics endpoints
|
148 |
*/
|
149 |
public static function register_endpoints() {
|
150 |
+
register_rest_route( self::get_analytics_namespace(), self::get_analytics_route(), apply_filters( 'pum_analytics_rest_route_args', array(
|
|
|
|
|
|
|
151 |
'methods' => 'GET',
|
152 |
'callback' => array( __CLASS__, 'analytics_endpoint' ),
|
153 |
'permission_callback' => '__return_true',
|
168 |
) ) );
|
169 |
}
|
170 |
|
171 |
+
/**
|
172 |
+
* Adds our analytics endpoint to pum_vars
|
173 |
+
*
|
174 |
+
* @param array $vars The current pum_vars.
|
175 |
+
* @return array The updates pum_vars
|
176 |
+
*/
|
177 |
+
public static function pum_vars( $vars = array() ) {
|
178 |
+
$vars['analytics_route'] = self::get_analytics_route();
|
179 |
+
if ( function_exists( 'rest_url' ) ) {
|
180 |
+
$vars['analytics_api'] = esc_url_raw( rest_url( self::get_analytics_namespace() ) );
|
181 |
+
} else {
|
182 |
+
$vars['analytics_api'] = false;
|
183 |
+
}
|
184 |
+
return $vars;
|
185 |
+
}
|
186 |
+
|
187 |
+
/**
|
188 |
+
* Gets the analytics namespace
|
189 |
+
*
|
190 |
+
* If bypass adblockers is enabled, will return random or custom string. If not, returns 'pum/v1'.
|
191 |
+
*
|
192 |
+
* @return string The analytics namespce
|
193 |
+
* @since 1.13.0
|
194 |
+
*/
|
195 |
+
public static function get_analytics_namespace() {
|
196 |
+
$version = 1;
|
197 |
+
$namespace = self::customize_endpoint_value( 'pum' );
|
198 |
+
return "$namespace/v$version";
|
199 |
+
}
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Gets the analytics route
|
203 |
+
*
|
204 |
+
* If bypass adblockers is enabled, will return random or custom string. If not, returns 'analytics'.
|
205 |
+
*
|
206 |
+
* @return string The analytics route
|
207 |
+
* @since 1.13.0
|
208 |
+
*/
|
209 |
+
public static function get_analytics_route() {
|
210 |
+
$route = 'analytics';
|
211 |
+
return self::customize_endpoint_value( $route );
|
212 |
+
}
|
213 |
+
|
214 |
+
/**
|
215 |
+
* Customizes the endpoint value given to it
|
216 |
+
*
|
217 |
+
* If bypass adblockers is enabled, will return random or custom string. If not, returns the value given to it.
|
218 |
+
*
|
219 |
+
* @param string $value The value to, potentially, customize.
|
220 |
+
* @return string
|
221 |
+
* @since 1.13.0
|
222 |
+
*/
|
223 |
+
public static function customize_endpoint_value( $value = '' ) {
|
224 |
+
$bypass_adblockers = pum_get_option( 'bypass_adblockers', false );
|
225 |
+
if ( true === $bypass_adblockers || 1 === intval( $bypass_adblockers ) ) {
|
226 |
+
switch ( pum_get_option( 'adblock_bypass_url_method', 'random' ) ) {
|
227 |
+
case 'custom':
|
228 |
+
$value = preg_replace( '/[^a-z0-9]+/', '-', pum_get_option( 'adblock_bypass_custom_filename', $value ) );
|
229 |
+
break;
|
230 |
+
case 'random':
|
231 |
+
default:
|
232 |
+
$site_url = get_site_url();
|
233 |
+
$value = md5( $site_url . $value );
|
234 |
+
break;
|
235 |
+
}
|
236 |
+
}
|
237 |
+
return $value;
|
238 |
+
}
|
239 |
+
|
240 |
/**
|
241 |
* Creates and returns a 1x1 tracking gif to the browser.
|
242 |
*/
|
classes/Extension/License.php
CHANGED
@@ -363,12 +363,12 @@ class PUM_Extension_License {
|
|
363 |
|
364 |
// If this alert is already in the list of alerts, abort.
|
365 |
foreach ( $alerts as $alert ) {
|
366 |
-
if ( $alert['code']
|
367 |
return $alerts;
|
368 |
}
|
369 |
}
|
370 |
|
371 |
-
// If this license key is not empty, check if it's valid
|
372 |
if ( ! empty( $this->license ) ) {
|
373 |
$license = get_option( $this->item_shortname . '_license_active' );
|
374 |
|
@@ -379,13 +379,23 @@ class PUM_Extension_License {
|
|
379 |
|
380 |
$showed_invalid_message = true;
|
381 |
|
382 |
-
$
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
389 |
|
390 |
return $alerts;
|
391 |
}
|
363 |
|
364 |
// If this alert is already in the list of alerts, abort.
|
365 |
foreach ( $alerts as $alert ) {
|
366 |
+
if ( 'license_not_valid' === $alert['code'] ) {
|
367 |
return $alerts;
|
368 |
}
|
369 |
}
|
370 |
|
371 |
+
// If this license key is not empty, check if it's valid.
|
372 |
if ( ! empty( $this->license ) ) {
|
373 |
$license = get_option( $this->item_shortname . '_license_active' );
|
374 |
|
379 |
|
380 |
$showed_invalid_message = true;
|
381 |
|
382 |
+
if ( empty( $this->license ) ) {
|
383 |
+
$alerts[] = array(
|
384 |
+
'code' => 'license_not_valid',
|
385 |
+
'message' => sprintf( __( 'One or more of your extensions are missing license keys. You will not be able to receive updates until the extension has a valid license key entered. Please go to the %sLicenses page%s to add your license keys.', 'popup-maker' ), '<a href="' . admin_url( 'edit.php?post_type=popup&page=pum-settings&tab=licenses' ) . '">', '</a>' ),
|
386 |
+
'type' => 'error',
|
387 |
+
'dismissible' => '4 weeks',
|
388 |
+
'priority' => 0,
|
389 |
+
);
|
390 |
+
} else {
|
391 |
+
$alerts[] = array(
|
392 |
+
'code' => 'license_not_valid',
|
393 |
+
'message' => sprintf( __( 'You have invalid or expired license keys for Popup Maker. Please go to the %sLicenses page%s to correct this issue.', 'popup-maker' ), '<a href="' . admin_url( 'edit.php?post_type=popup&page=pum-settings&tab=licenses' ) . '">', '</a>' ),
|
394 |
+
'type' => 'error',
|
395 |
+
'dismissible' => '4 weeks',
|
396 |
+
'priority' => 0,
|
397 |
+
);
|
398 |
+
}
|
399 |
|
400 |
return $alerts;
|
401 |
}
|
classes/Integration/Form/CalderaForms.php
CHANGED
@@ -63,8 +63,14 @@ class PUM_Integration_Form_CalderaForms extends PUM_Abstract_Integration_Form {
|
|
63 |
* @param array $form
|
64 |
*/
|
65 |
public function on_success( $form ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
pum_integrated_form_submission( [
|
67 |
-
'popup_id' =>
|
68 |
'form_provider' => $this->key,
|
69 |
'form_id' => $form['ID'],
|
70 |
] );
|
@@ -76,12 +82,6 @@ class PUM_Integration_Form_CalderaForms extends PUM_Abstract_Integration_Form {
|
|
76 |
* @return array
|
77 |
*/
|
78 |
public function custom_scripts( $js = [] ) {
|
79 |
-
$js[ $this->key ] = [
|
80 |
-
'content' => file_get_contents( Popup_Maker::$DIR . 'assets/js/pum-integration-' . $this->key . PUM_Site_Assets::$suffix . '.js' ),
|
81 |
-
'priority' => 8,
|
82 |
-
];
|
83 |
-
|
84 |
-
|
85 |
return $js;
|
86 |
}
|
87 |
|
63 |
* @param array $form
|
64 |
*/
|
65 |
public function on_success( $form ) {
|
66 |
+
if ( ! self::should_process_submission() ) {
|
67 |
+
return;
|
68 |
+
}
|
69 |
+
$popup_id = self::get_popup_id();
|
70 |
+
self::increase_conversion( $popup_id );
|
71 |
+
|
72 |
pum_integrated_form_submission( [
|
73 |
+
'popup_id' => $popup_id,
|
74 |
'form_provider' => $this->key,
|
75 |
'form_id' => $form['ID'],
|
76 |
] );
|
82 |
* @return array
|
83 |
*/
|
84 |
public function custom_scripts( $js = [] ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
return $js;
|
86 |
}
|
87 |
|
classes/Integration/Form/ContactForm7.php
CHANGED
@@ -87,11 +87,15 @@ class PUM_Integration_Form_ContactForm7 extends PUM_Abstract_Integration_Form {
|
|
87 |
* @param WPCF7_ContactForm $cfdata
|
88 |
*/
|
89 |
public function on_success( $cfdata ) {
|
90 |
-
|
91 |
-
|
92 |
-
|
|
|
|
|
|
|
|
|
93 |
pum_integrated_form_submission( [
|
94 |
-
'popup_id' =>
|
95 |
'form_provider' => $this->key,
|
96 |
'form_id' => $cfdata->id(),
|
97 |
] );
|
@@ -105,11 +109,6 @@ class PUM_Integration_Form_ContactForm7 extends PUM_Abstract_Integration_Form {
|
|
105 |
* @return array
|
106 |
*/
|
107 |
public function custom_scripts( $js = [] ) {
|
108 |
-
$js[ $this->key ] = [
|
109 |
-
'content' => file_get_contents( Popup_Maker::$DIR . 'assets/js/pum-integration-' . $this->key . PUM_Site_Assets::$suffix . '.js' ),
|
110 |
-
'priority' => 8,
|
111 |
-
];
|
112 |
-
|
113 |
return $js;
|
114 |
}
|
115 |
|
87 |
* @param WPCF7_ContactForm $cfdata
|
88 |
*/
|
89 |
public function on_success( $cfdata ) {
|
90 |
+
|
91 |
+
if ( ! self::should_process_submission() ) {
|
92 |
+
return;
|
93 |
+
}
|
94 |
+
$popup_id = self::get_popup_id();
|
95 |
+
self::increase_conversion( $popup_id );
|
96 |
+
|
97 |
pum_integrated_form_submission( [
|
98 |
+
'popup_id' => $popup_id,
|
99 |
'form_provider' => $this->key,
|
100 |
'form_id' => $cfdata->id(),
|
101 |
] );
|
109 |
* @return array
|
110 |
*/
|
111 |
public function custom_scripts( $js = [] ) {
|
|
|
|
|
|
|
|
|
|
|
112 |
return $js;
|
113 |
}
|
114 |
|
classes/Integration/Form/FormidableForms.php
CHANGED
@@ -95,10 +95,15 @@ class PUM_Integration_Form_FormidableForms extends PUM_Abstract_Integration_Form
|
|
95 |
return;
|
96 |
}
|
97 |
|
98 |
-
|
|
|
|
|
|
|
|
|
|
|
99 |
pum_integrated_form_submission(
|
100 |
[
|
101 |
-
'popup_id' =>
|
102 |
'form_provider' => $this->key,
|
103 |
'form_id' => $form_id,
|
104 |
]
|
@@ -112,11 +117,6 @@ class PUM_Integration_Form_FormidableForms extends PUM_Abstract_Integration_Form
|
|
112 |
* @return array
|
113 |
*/
|
114 |
public function custom_scripts( $js = [] ) {
|
115 |
-
$js[ $this->key ] = [
|
116 |
-
'content' => file_get_contents( Popup_Maker::$DIR . 'assets/js/pum-integration-' . $this->key . PUM_Site_Assets::$suffix . '.js' ),
|
117 |
-
'priority' => 8,
|
118 |
-
];
|
119 |
-
|
120 |
return $js;
|
121 |
}
|
122 |
|
95 |
return;
|
96 |
}
|
97 |
|
98 |
+
if ( ! self::should_process_submission() ) {
|
99 |
+
return;
|
100 |
+
}
|
101 |
+
$popup_id = self::get_popup_id();
|
102 |
+
self::increase_conversion( $popup_id );
|
103 |
+
|
104 |
pum_integrated_form_submission(
|
105 |
[
|
106 |
+
'popup_id' => $popup_id,
|
107 |
'form_provider' => $this->key,
|
108 |
'form_id' => $form_id,
|
109 |
]
|
117 |
* @return array
|
118 |
*/
|
119 |
public function custom_scripts( $js = [] ) {
|
|
|
|
|
|
|
|
|
|
|
120 |
return $js;
|
121 |
}
|
122 |
|
classes/Integration/Form/GravityForms.php
CHANGED
@@ -65,8 +65,20 @@ class PUM_Integration_Form_GravityForms extends PUM_Abstract_Integration_Form {
|
|
65 |
* @param $form
|
66 |
*/
|
67 |
public function on_success( $entry, $form ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
pum_integrated_form_submission( [
|
69 |
-
'popup_id' =>
|
70 |
'form_provider' => $this->key,
|
71 |
'form_id' => $form['id'],
|
72 |
] );
|
@@ -78,11 +90,6 @@ class PUM_Integration_Form_GravityForms extends PUM_Abstract_Integration_Form {
|
|
78 |
* @return array
|
79 |
*/
|
80 |
public function custom_scripts( $js = [] ) {
|
81 |
-
$js[ $this->key ] = [
|
82 |
-
'content' => file_get_contents( Popup_Maker::$DIR . 'assets/js/pum-integration-' . $this->key . PUM_Site_Assets::$suffix . '.js' ),
|
83 |
-
'priority' => 8,
|
84 |
-
];
|
85 |
-
|
86 |
return $js;
|
87 |
}
|
88 |
|
65 |
* @param $form
|
66 |
*/
|
67 |
public function on_success( $entry, $form ) {
|
68 |
+
if ( ! self::should_process_submission() ) {
|
69 |
+
return;
|
70 |
+
}
|
71 |
+
|
72 |
+
// This key is set when Gravity Forms is submitted via AJAX.
|
73 |
+
if ( isset( $_POST['gform_ajax'] ) || ! is_null( $_POST['gform_ajax'] ) ) {
|
74 |
+
return;
|
75 |
+
}
|
76 |
+
|
77 |
+
$popup_id = self::get_popup_id();
|
78 |
+
self::increase_conversion( $popup_id );
|
79 |
+
|
80 |
pum_integrated_form_submission( [
|
81 |
+
'popup_id' => $popup_id,
|
82 |
'form_provider' => $this->key,
|
83 |
'form_id' => $form['id'],
|
84 |
] );
|
90 |
* @return array
|
91 |
*/
|
92 |
public function custom_scripts( $js = [] ) {
|
|
|
|
|
|
|
|
|
|
|
93 |
return $js;
|
94 |
}
|
95 |
|
classes/Integration/Form/MC4WP.php
CHANGED
@@ -77,11 +77,6 @@ class PUM_Integration_Form_MC4WP extends PUM_Abstract_Integration_Form {
|
|
77 |
* @return array
|
78 |
*/
|
79 |
public function custom_scripts( $js = [] ) {
|
80 |
-
$js[ $this->key ] = [
|
81 |
-
'content' => file_get_contents( Popup_Maker::$DIR . 'assets/js/pum-integration-' . $this->key . PUM_Site_Assets::$suffix . '.js' ),
|
82 |
-
'priority' => 8,
|
83 |
-
];
|
84 |
-
|
85 |
return $js;
|
86 |
}
|
87 |
|
77 |
* @return array
|
78 |
*/
|
79 |
public function custom_scripts( $js = [] ) {
|
|
|
|
|
|
|
|
|
|
|
80 |
return $js;
|
81 |
}
|
82 |
|
classes/Integration/Form/NinjaForms.php
CHANGED
@@ -65,8 +65,15 @@ class PUM_Integration_Form_NinjaForms extends PUM_Abstract_Integration_Form {
|
|
65 |
*/
|
66 |
public function on_success_v2() {
|
67 |
global $ninja_forms_processing;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
pum_integrated_form_submission( [
|
69 |
-
'popup_id' =>
|
70 |
'form_provider' => $this->key,
|
71 |
'form_id' => $ninja_forms_processing->get_form_ID(),
|
72 |
] );
|
@@ -76,8 +83,13 @@ class PUM_Integration_Form_NinjaForms extends PUM_Abstract_Integration_Form {
|
|
76 |
* @param $form_data
|
77 |
*/
|
78 |
public function on_success_v3( $form_data ) {
|
|
|
|
|
|
|
|
|
|
|
79 |
pum_integrated_form_submission( [
|
80 |
-
'popup_id' =>
|
81 |
'form_provider' => $this->key,
|
82 |
'form_id' => $form_data['form_id'],
|
83 |
] );
|
@@ -89,11 +101,6 @@ class PUM_Integration_Form_NinjaForms extends PUM_Abstract_Integration_Form {
|
|
89 |
* @return array
|
90 |
*/
|
91 |
public function custom_scripts( $js = [] ) {
|
92 |
-
$js[ $this->key ] = [
|
93 |
-
'content' => file_get_contents( Popup_Maker::$DIR . 'assets/js/pum-integration-' . $this->key . PUM_Site_Assets::$suffix . '.js' ),
|
94 |
-
'priority' => 8,
|
95 |
-
];
|
96 |
-
|
97 |
return $js;
|
98 |
}
|
99 |
|
65 |
*/
|
66 |
public function on_success_v2() {
|
67 |
global $ninja_forms_processing;
|
68 |
+
|
69 |
+
if ( ! self::should_process_submission() ) {
|
70 |
+
return;
|
71 |
+
}
|
72 |
+
$popup_id = self::get_popup_id();
|
73 |
+
self::increase_conversion( $popup_id );
|
74 |
+
|
75 |
pum_integrated_form_submission( [
|
76 |
+
'popup_id' => $popup_id,
|
77 |
'form_provider' => $this->key,
|
78 |
'form_id' => $ninja_forms_processing->get_form_ID(),
|
79 |
] );
|
83 |
* @param $form_data
|
84 |
*/
|
85 |
public function on_success_v3( $form_data ) {
|
86 |
+
if ( ! self::should_process_submission() ) {
|
87 |
+
return;
|
88 |
+
}
|
89 |
+
$popup_id = self::get_popup_id();
|
90 |
+
self::increase_conversion( $popup_id );
|
91 |
pum_integrated_form_submission( [
|
92 |
+
'popup_id' => $popup_id,
|
93 |
'form_provider' => $this->key,
|
94 |
'form_id' => $form_data['form_id'],
|
95 |
] );
|
101 |
* @return array
|
102 |
*/
|
103 |
public function custom_scripts( $js = [] ) {
|
|
|
|
|
|
|
|
|
|
|
104 |
return $js;
|
105 |
}
|
106 |
|
classes/Integration/Form/PirateForms.php
CHANGED
@@ -127,8 +127,13 @@ class PUM_Integration_Form_PirateForms extends PUM_Abstract_Integration_Form {
|
|
127 |
* @param int $entry_id Entry ID. Will return 0 if entry storage is disabled or using WPForms Lite.
|
128 |
*/
|
129 |
public function on_success( $fields, $entry, $form_data, $entry_id ) {
|
|
|
|
|
|
|
|
|
|
|
130 |
pum_integrated_form_submission( [
|
131 |
-
'popup_id' =>
|
132 |
'form_provider' => $this->key,
|
133 |
'form_id' => $form_data['id'],
|
134 |
] );
|
@@ -140,11 +145,6 @@ class PUM_Integration_Form_PirateForms extends PUM_Abstract_Integration_Form {
|
|
140 |
* @return array
|
141 |
*/
|
142 |
public function custom_scripts( $js = [] ) {
|
143 |
-
$js[ $this->key ] = [
|
144 |
-
'content' => file_get_contents( Popup_Maker::$DIR . 'assets/js/pum-integration-' . $this->key . PUM_Site_Assets::$suffix . '.js' ),
|
145 |
-
'priority' => 8,
|
146 |
-
];
|
147 |
-
|
148 |
return $js;
|
149 |
}
|
150 |
|
127 |
* @param int $entry_id Entry ID. Will return 0 if entry storage is disabled or using WPForms Lite.
|
128 |
*/
|
129 |
public function on_success( $fields, $entry, $form_data, $entry_id ) {
|
130 |
+
if ( ! self::should_process_submission() ) {
|
131 |
+
return;
|
132 |
+
}
|
133 |
+
$popup_id = self::get_popup_id();
|
134 |
+
self::increase_conversion( $popup_id );
|
135 |
pum_integrated_form_submission( [
|
136 |
+
'popup_id' => $popup_id,
|
137 |
'form_provider' => $this->key,
|
138 |
'form_id' => $form_data['id'],
|
139 |
] );
|
145 |
* @return array
|
146 |
*/
|
147 |
public function custom_scripts( $js = [] ) {
|
|
|
|
|
|
|
|
|
|
|
148 |
return $js;
|
149 |
}
|
150 |
|
classes/Integration/Form/WPForms.php
CHANGED
@@ -70,8 +70,13 @@ class PUM_Integration_Form_WPForms extends PUM_Abstract_Integration_Form {
|
|
70 |
* @param int $entry_id Entry ID. Will return 0 if entry storage is disabled or using WPForms Lite.
|
71 |
*/
|
72 |
public function on_success( $fields, $entry, $form_data, $entry_id ) {
|
|
|
|
|
|
|
|
|
|
|
73 |
pum_integrated_form_submission( [
|
74 |
-
'popup_id' =>
|
75 |
'form_provider' => $this->key,
|
76 |
'form_id' => $form_data['id'],
|
77 |
] );
|
@@ -83,11 +88,6 @@ class PUM_Integration_Form_WPForms extends PUM_Abstract_Integration_Form {
|
|
83 |
* @return array
|
84 |
*/
|
85 |
public function custom_scripts( $js = [] ) {
|
86 |
-
$js[ $this->key ] = [
|
87 |
-
'content' => file_get_contents( Popup_Maker::$DIR . 'assets/js/pum-integration-' . $this->key . PUM_Site_Assets::$suffix . '.js' ),
|
88 |
-
'priority' => 8,
|
89 |
-
];
|
90 |
-
|
91 |
return $js;
|
92 |
}
|
93 |
|
70 |
* @param int $entry_id Entry ID. Will return 0 if entry storage is disabled or using WPForms Lite.
|
71 |
*/
|
72 |
public function on_success( $fields, $entry, $form_data, $entry_id ) {
|
73 |
+
if ( ! self::should_process_submission() ) {
|
74 |
+
return;
|
75 |
+
}
|
76 |
+
$popup_id = self::get_popup_id();
|
77 |
+
self::increase_conversion( $popup_id );
|
78 |
pum_integrated_form_submission( [
|
79 |
+
'popup_id' => $popup_id,
|
80 |
'form_provider' => $this->key,
|
81 |
'form_id' => $form_data['id'],
|
82 |
] );
|
88 |
* @return array
|
89 |
*/
|
90 |
public function custom_scripts( $js = [] ) {
|
|
|
|
|
|
|
|
|
|
|
91 |
return $js;
|
92 |
}
|
93 |
|
classes/Upsell.php
CHANGED
@@ -1,8 +1,13 @@
|
|
1 |
<?php
|
2 |
|
|
|
|
|
|
|
3 |
class PUM_Upsell {
|
4 |
|
5 |
-
|
|
|
|
|
6 |
public static function init() {
|
7 |
add_filter( 'views_edit-popup', array( __CLASS__, 'addon_tabs' ), 10, 1 );
|
8 |
add_filter( 'views_edit-popup_theme', array( __CLASS__, 'addon_tabs' ), 10, 1 );
|
@@ -11,8 +16,9 @@ class PUM_Upsell {
|
|
11 |
}
|
12 |
|
13 |
/**
|
14 |
-
*
|
15 |
*
|
|
|
16 |
* @return array
|
17 |
*/
|
18 |
public static function popup_promotional_fields( $tabs = array() ) {
|
@@ -44,8 +50,9 @@ class PUM_Upsell {
|
|
44 |
}
|
45 |
|
46 |
/**
|
47 |
-
*
|
48 |
*
|
|
|
49 |
* @return array
|
50 |
*/
|
51 |
public static function theme_promotional_fields( $tabs = array() ) {
|
@@ -71,9 +78,7 @@ class PUM_Upsell {
|
|
71 |
* When the Popup or Popup Theme list table loads, call the function to view our tabs.
|
72 |
*
|
73 |
* @since 1.8.0
|
74 |
-
*
|
75 |
-
* @param $views
|
76 |
-
*
|
77 |
* @return mixed
|
78 |
*/
|
79 |
public static function addon_tabs( $views ) {
|
@@ -93,39 +98,35 @@ class PUM_Upsell {
|
|
93 |
$theme_labels = PUM_Types::post_type_labels( __( 'Popup Theme', 'popup-maker' ), __( 'Popup Themes', 'popup-maker' ) );
|
94 |
|
95 |
?>
|
|
|
|
|
|
|
|
|
96 |
|
|
|
|
|
|
|
|
|
97 |
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
margin-left: 5px
|
106 |
-
}
|
107 |
-
|
108 |
-
@media only screen and (min-width: 0px) and (max-width: 783px) {
|
109 |
-
.edit-php.post-type-popup .wrap .nav-tab-wrapper .page-title-action, .edit-php.post-type-popup_theme .wrap .nav-tab-wrapper .page-title-action, .popup_page_pum-extensions .wrap .nav-tab-wrapper .page-title-action {
|
110 |
-
display: none !important
|
111 |
-
}
|
112 |
-
}
|
113 |
-
</style>
|
114 |
-
|
115 |
-
|
116 |
-
<h2 class="nav-tab-wrapper">
|
117 |
<?php
|
118 |
$tabs = array(
|
119 |
'popups' => array(
|
120 |
-
'name' => $popup_labels['name'],
|
121 |
'url' => admin_url( 'edit.php?post_type=popup' ),
|
122 |
),
|
123 |
'themes' => array(
|
124 |
-
'name' => $theme_labels['name'],
|
125 |
'url' => admin_url( 'edit.php?post_type=popup_theme' ),
|
126 |
),
|
127 |
'integrations' => array(
|
128 |
-
'name' =>
|
129 |
'url' => admin_url( 'edit.php?post_type=popup&page=pum-extensions&view=integrations' ),
|
130 |
),
|
131 |
);
|
@@ -134,9 +135,10 @@ class PUM_Upsell {
|
|
134 |
|
135 |
$active_tab = false;
|
136 |
|
|
|
137 |
if ( isset( $_GET['page'] ) && $_GET['page'] === 'pum-extensions' ) {
|
138 |
$active_tab = 'integrations';
|
139 |
-
}
|
140 |
switch ( $_GET['post_type'] ) {
|
141 |
case 'popup':
|
142 |
$active_tab = 'popups';
|
@@ -147,24 +149,25 @@ class PUM_Upsell {
|
|
147 |
}
|
148 |
}
|
149 |
|
|
|
150 |
foreach ( $tabs as $tab_id => $tab ) {
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
}
|
158 |
?>
|
159 |
|
160 |
-
|
161 |
-
<?php echo $popup_labels['add_new_item']; ?>
|
162 |
-
|
163 |
|
164 |
-
|
165 |
-
<?php echo $theme_labels['add_new_item']; ?>
|
166 |
-
|
167 |
-
|
168 |
<?php
|
169 |
}
|
170 |
|
1 |
<?php
|
2 |
|
3 |
+
/**
|
4 |
+
* Handles displaying promotional text throughout plugin UI
|
5 |
+
*/
|
6 |
class PUM_Upsell {
|
7 |
|
8 |
+
/**
|
9 |
+
* Hooks any needed methods
|
10 |
+
*/
|
11 |
public static function init() {
|
12 |
add_filter( 'views_edit-popup', array( __CLASS__, 'addon_tabs' ), 10, 1 );
|
13 |
add_filter( 'views_edit-popup_theme', array( __CLASS__, 'addon_tabs' ), 10, 1 );
|
16 |
}
|
17 |
|
18 |
/**
|
19 |
+
* Adds messages throughout Popup Settings UI
|
20 |
*
|
21 |
+
* @param array $tabs The tabs/fields for popup settings.
|
22 |
* @return array
|
23 |
*/
|
24 |
public static function popup_promotional_fields( $tabs = array() ) {
|
50 |
}
|
51 |
|
52 |
/**
|
53 |
+
* Adds messages throughout Popup Theme UI
|
54 |
*
|
55 |
+
* @param array $tabs The tabs/fields for popup theme.
|
56 |
* @return array
|
57 |
*/
|
58 |
public static function theme_promotional_fields( $tabs = array() ) {
|
78 |
* When the Popup or Popup Theme list table loads, call the function to view our tabs.
|
79 |
*
|
80 |
* @since 1.8.0
|
81 |
+
* @param array $views An array of available list table views.
|
|
|
|
|
82 |
* @return mixed
|
83 |
*/
|
84 |
public static function addon_tabs( $views ) {
|
98 |
$theme_labels = PUM_Types::post_type_labels( __( 'Popup Theme', 'popup-maker' ), __( 'Popup Themes', 'popup-maker' ) );
|
99 |
|
100 |
?>
|
101 |
+
<style>
|
102 |
+
.wrap h1.wp-heading-inline + a.page-title-action {
|
103 |
+
display: none;
|
104 |
+
}
|
105 |
|
106 |
+
.edit-php.post-type-popup .wrap .nav-tab-wrapper .page-title-action, .edit-php.post-type-popup_theme .wrap .nav-tab-wrapper .page-title-action, .popup_page_pum-extensions .wrap .nav-tab-wrapper .page-title-action {
|
107 |
+
top: 7px;
|
108 |
+
margin-left: 5px
|
109 |
+
}
|
110 |
|
111 |
+
@media only screen and (min-width: 0px) and (max-width: 783px) {
|
112 |
+
.edit-php.post-type-popup .wrap .nav-tab-wrapper .page-title-action, .edit-php.post-type-popup_theme .wrap .nav-tab-wrapper .page-title-action, .popup_page_pum-extensions .wrap .nav-tab-wrapper .page-title-action {
|
113 |
+
display: none !important
|
114 |
+
}
|
115 |
+
}
|
116 |
+
</style>
|
117 |
+
<nav class="nav-tab-wrapper">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
<?php
|
119 |
$tabs = array(
|
120 |
'popups' => array(
|
121 |
+
'name' => esc_html( $popup_labels['name'] ),
|
122 |
'url' => admin_url( 'edit.php?post_type=popup' ),
|
123 |
),
|
124 |
'themes' => array(
|
125 |
+
'name' => esc_html( $theme_labels['name'] ),
|
126 |
'url' => admin_url( 'edit.php?post_type=popup_theme' ),
|
127 |
),
|
128 |
'integrations' => array(
|
129 |
+
'name' => esc_html__( 'Extensions and Integrations', 'popup-maker' ) . PUM_Admin_Extend::append_unseen_count(),
|
130 |
'url' => admin_url( 'edit.php?post_type=popup&page=pum-extensions&view=integrations' ),
|
131 |
),
|
132 |
);
|
135 |
|
136 |
$active_tab = false;
|
137 |
|
138 |
+
// Calculate which tab is currently active.
|
139 |
if ( isset( $_GET['page'] ) && $_GET['page'] === 'pum-extensions' ) {
|
140 |
$active_tab = 'integrations';
|
141 |
+
} elseif ( ! isset( $_GET['page'] ) && isset( $_GET['post_type'] ) ) {
|
142 |
switch ( $_GET['post_type'] ) {
|
143 |
case 'popup':
|
144 |
$active_tab = 'popups';
|
149 |
}
|
150 |
}
|
151 |
|
152 |
+
// Add each tab, marking the current one as active.
|
153 |
foreach ( $tabs as $tab_id => $tab ) {
|
154 |
+
$active = $active_tab === $tab_id ? ' nav-tab-active' : '';
|
155 |
+
?>
|
156 |
+
<a href="<?php echo esc_url( $tab['url'] ); ?>" class="nav-tab<?php echo esc_attr( $active ); ?>">
|
157 |
+
<?php echo $tab['name']; ?>
|
158 |
+
</a>
|
159 |
+
<?php
|
160 |
}
|
161 |
?>
|
162 |
|
163 |
+
<a href="<?php echo esc_url( admin_url( 'post-new.php?post_type=popup' ) ); ?>" class="page-title-action">
|
164 |
+
<?php echo esc_html( $popup_labels['add_new_item'] ); ?>
|
165 |
+
</a>
|
166 |
|
167 |
+
<a href="<?php echo esc_url( admin_url( 'post-new.php?post_type=popup_theme' ) ); ?>" class="page-title-action">
|
168 |
+
<?php echo esc_html( $theme_labels['add_new_item'] ); ?>
|
169 |
+
</a>
|
170 |
+
</nav>
|
171 |
<?php
|
172 |
}
|
173 |
|
classes/Utils/Alerts.php
CHANGED
@@ -345,7 +345,7 @@ class PUM_Utils_Alerts {
|
|
345 |
|
346 |
<div class="pum-alert-holder" data-code="<?php echo $alert['code']; ?>" class="<?php echo $alert['dismissible'] ? 'is-dismissible' : ''; ?>" data-dismissible="<?php echo esc_attr( $alert['dismissible'] ); ?>">
|
347 |
|
348 |
-
<div class="pum-alert <?php echo $alert['type']
|
349 |
|
350 |
<?php if ( ! empty( $alert['message'] ) ) : ?>
|
351 |
<p><?php echo $alert['message']; ?></p>
|
@@ -357,10 +357,11 @@ class PUM_Utils_Alerts {
|
|
357 |
|
358 |
<?php if ( ! empty( $alert['actions'] ) && is_array( $alert['actions'] ) ) : ?>
|
359 |
<ul>
|
360 |
-
<?php
|
361 |
-
|
|
|
362 |
if ( 'link' === $action['type'] ) {
|
363 |
-
$url
|
364 |
$attributes = 'target="_blank" rel="noreferrer noopener"';
|
365 |
} else {
|
366 |
$url = add_query_arg( array(
|
@@ -369,10 +370,11 @@ class PUM_Utils_Alerts {
|
|
369 |
'pum_dismiss_alert' => $action['action'],
|
370 |
'expires' => $expires,
|
371 |
));
|
|
|
372 |
$attributes = 'class="pum-dismiss"';
|
373 |
}
|
374 |
?>
|
375 |
-
<li><a data-action="<?php echo esc_attr($action['action']); ?>" href="<?php echo esc_url($url); ?>" <?php echo $attributes; ?> ><?php echo $link_text; ?></a></li>
|
376 |
<?php } ?>
|
377 |
</ul>
|
378 |
<?php endif; ?>
|
345 |
|
346 |
<div class="pum-alert-holder" data-code="<?php echo $alert['code']; ?>" class="<?php echo $alert['dismissible'] ? 'is-dismissible' : ''; ?>" data-dismissible="<?php echo esc_attr( $alert['dismissible'] ); ?>">
|
347 |
|
348 |
+
<div class="pum-alert <?php echo '' !== $alert['type'] ? 'pum-alert__' . esc_attr( $alert['type'] ) : ''; ?>">
|
349 |
|
350 |
<?php if ( ! empty( $alert['message'] ) ) : ?>
|
351 |
<p><?php echo $alert['message']; ?></p>
|
357 |
|
358 |
<?php if ( ! empty( $alert['actions'] ) && is_array( $alert['actions'] ) ) : ?>
|
359 |
<ul>
|
360 |
+
<?php
|
361 |
+
foreach ( $alert['actions'] as $action ) {
|
362 |
+
$link_text = ! empty( $action['primary'] ) && true === $action['primary'] ? '<strong>' . esc_html( $action['text'] ) . '</strong>' : esc_html( $action['text'] );
|
363 |
if ( 'link' === $action['type'] ) {
|
364 |
+
$url = $action['href'];
|
365 |
$attributes = 'target="_blank" rel="noreferrer noopener"';
|
366 |
} else {
|
367 |
$url = add_query_arg( array(
|
370 |
'pum_dismiss_alert' => $action['action'],
|
371 |
'expires' => $expires,
|
372 |
));
|
373 |
+
|
374 |
$attributes = 'class="pum-dismiss"';
|
375 |
}
|
376 |
?>
|
377 |
+
<li><a data-action="<?php echo esc_attr( $action['action'] ); ?>" href="<?php echo esc_url( $url ); ?>" <?php echo $attributes; ?> ><?php echo $link_text; ?></a></li>
|
378 |
<?php } ?>
|
379 |
</ul>
|
380 |
<?php endif; ?>
|
languages/popup-maker.pot
CHANGED
@@ -6,7 +6,7 @@ msgstr ""
|
|
6 |
"MIME-Version: 1.0\n"
|
7 |
"Content-Type: text/plain; charset=UTF-8\n"
|
8 |
"Content-Transfer-Encoding: 8bit\n"
|
9 |
-
"Language-Team:
|
10 |
"Report-Msgid-Bugs-To: https://wppopupmaker.com/support/\n"
|
11 |
"X-Poedit-Basepath: ..\n"
|
12 |
"X-Poedit-KeywordsList: __;_e;_ex:1,2c;_n:1,2;_n_noop:1,2;_nx:1,2,4c;_nx_noop:1,2,3c;_x:1,2c;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c\n"
|
@@ -89,7 +89,7 @@ msgstr ""
|
|
89 |
msgid "Add"
|
90 |
msgstr ""
|
91 |
|
92 |
-
#: classes/Admin/Assets.php:69, classes/Admin/Settings.php:
|
93 |
msgid "Save"
|
94 |
msgstr ""
|
95 |
|
@@ -113,7 +113,7 @@ msgstr ""
|
|
113 |
msgid "Are you sure you want to delete this cookie?"
|
114 |
msgstr ""
|
115 |
|
116 |
-
#: classes/Admin/Assets.php:75, classes/Admin/Popups.php:
|
117 |
msgid "None"
|
118 |
msgstr ""
|
119 |
|
@@ -257,70 +257,90 @@ msgstr ""
|
|
257 |
msgid "Get this Extension"
|
258 |
msgstr ""
|
259 |
|
260 |
-
#: classes/Admin/Helpers.php:204, classes/Admin/Popups.php:
|
261 |
msgid "ms"
|
262 |
msgstr ""
|
263 |
|
264 |
-
#: classes/Admin/Helpers.php:373, classes/Admin/Popups.php:
|
265 |
msgid "Close"
|
266 |
msgstr ""
|
267 |
|
268 |
-
#: classes/Admin/Onboarding.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
269 |
msgid "Popup Name"
|
270 |
msgstr ""
|
271 |
|
272 |
-
#: classes/Admin/Onboarding.php:
|
273 |
msgid "Name your popup so you can find it later. Site visitors will not see this."
|
274 |
msgstr ""
|
275 |
|
276 |
-
#: classes/Admin/Onboarding.php:
|
277 |
msgid "Popup Content"
|
278 |
msgstr ""
|
279 |
|
280 |
-
#: classes/Admin/Onboarding.php:
|
281 |
msgid "Add content for your popup here."
|
282 |
msgstr ""
|
283 |
|
284 |
-
#: classes/Admin/Onboarding.php:
|
285 |
msgid "Popup Triggers"
|
286 |
msgstr ""
|
287 |
|
288 |
-
#: classes/Admin/Onboarding.php:
|
289 |
msgid "Use triggers to choose what causes the popup to open."
|
290 |
msgstr ""
|
291 |
|
292 |
-
#: classes/Admin/Onboarding.php:
|
293 |
msgid "Popup Targeting"
|
294 |
msgstr ""
|
295 |
|
296 |
-
#: classes/Admin/Onboarding.php:
|
297 |
msgid "Use targeting to choose where on your site the popup should load and who to show the popup to."
|
298 |
msgstr ""
|
299 |
|
300 |
-
#: classes/Admin/Onboarding.php:
|
301 |
msgid "Popup Display"
|
302 |
msgstr ""
|
303 |
|
304 |
-
#: classes/Admin/Onboarding.php:
|
305 |
msgid "Use display settings to choose where on the screen the popup appears and what it looks like."
|
306 |
msgstr ""
|
307 |
|
308 |
-
#: classes/Admin/Onboarding.php:
|
309 |
msgid "Popup Theme"
|
310 |
msgstr ""
|
311 |
|
312 |
-
#: classes/Admin/Onboarding.php:
|
313 |
msgid "Choose the popup theme which controls the visual appearance of your popup including; colors, spacing, and fonts."
|
314 |
msgstr ""
|
315 |
|
316 |
-
#: classes/Admin/Onboarding.php:
|
317 |
msgid "Welcome to Popup Maker!"
|
318 |
msgstr ""
|
319 |
|
320 |
-
#: classes/Admin/Onboarding.php:
|
321 |
msgid "Click the \"Add New Popup\" button to create your first popup."
|
322 |
msgstr ""
|
323 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
324 |
#: classes/Admin/Pages.php:52, classes/Admin/Subscribers.php:30
|
325 |
msgid "Subscribers"
|
326 |
msgstr ""
|
@@ -337,7 +357,7 @@ msgstr ""
|
|
337 |
msgid "Tools"
|
338 |
msgstr ""
|
339 |
|
340 |
-
#: classes/Admin/Pages.php:107, classes/Admin/Pages.php:107, classes/Types.php:54, classes/Types.php:56, classes/Upsell.php:
|
341 |
msgid "Popup Themes"
|
342 |
msgstr ""
|
343 |
|
@@ -353,11 +373,11 @@ msgstr ""
|
|
353 |
msgid "All Themes"
|
354 |
msgstr ""
|
355 |
|
356 |
-
#: classes/Admin/Pages.php:145, classes/Admin/Popups.php:
|
357 |
msgid "Categories"
|
358 |
msgstr ""
|
359 |
|
360 |
-
#: classes/Admin/Pages.php:146, classes/Admin/Popups.php:
|
361 |
msgid "Tags"
|
362 |
msgstr ""
|
363 |
|
@@ -373,532 +393,548 @@ msgstr ""
|
|
373 |
msgid "Contact Us"
|
374 |
msgstr ""
|
375 |
|
376 |
-
#: classes/Admin/Popups.php:
|
377 |
msgid "Popup"
|
378 |
msgstr ""
|
379 |
|
380 |
-
#: classes/Admin/Popups.php:
|
381 |
msgid "Popup Title"
|
382 |
msgstr ""
|
383 |
|
384 |
-
#: classes/Admin/Popups.php:
|
385 |
msgid "Optional"
|
386 |
msgstr ""
|
387 |
|
388 |
-
#: classes/Admin/Popups.php:
|
389 |
msgid "Shown as headline inside the popup. Can be left blank."
|
390 |
msgstr ""
|
391 |
|
392 |
-
#: classes/Admin/Popups.php:
|
393 |
msgid "Required"
|
394 |
msgstr ""
|
395 |
|
396 |
-
#: classes/Admin/Popups.php:
|
397 |
msgid "Enter a name to help you remember what this popup is about. Only you will see this."
|
398 |
msgstr ""
|
399 |
|
400 |
-
#: classes/Admin/Popups.php:
|
401 |
msgid "Popup Settings"
|
402 |
msgstr ""
|
403 |
|
404 |
-
#: classes/Admin/Popups.php:
|
405 |
msgid "Analytics"
|
406 |
msgstr ""
|
407 |
|
408 |
-
#: classes/Admin/Popups.php:
|
409 |
msgid "If you are seeing this, the page is still loading or there are Javascript errors on this page. %sView troubleshooting guide%s"
|
410 |
msgstr ""
|
411 |
|
412 |
-
#: classes/Admin/Popups.php:
|
413 |
msgid "General"
|
414 |
msgstr ""
|
415 |
|
416 |
-
#: classes/Admin/Popups.php:
|
417 |
msgid "Display"
|
418 |
msgstr ""
|
419 |
|
420 |
-
#: classes/Admin/Popups.php:
|
421 |
msgid "Triggers"
|
422 |
msgstr ""
|
423 |
|
424 |
-
#: classes/Admin/Popups.php:
|
425 |
msgid "Targeting"
|
426 |
msgstr ""
|
427 |
|
428 |
-
#: classes/Admin/Popups.php:
|
429 |
msgid "Advanced"
|
430 |
msgstr ""
|
431 |
|
432 |
-
#: classes/Admin/Popups.php:
|
433 |
msgid "General Settings"
|
434 |
msgstr ""
|
435 |
|
436 |
-
#: classes/Admin/Popups.php:
|
437 |
msgid "Triggers & Cookies"
|
438 |
msgstr ""
|
439 |
|
440 |
-
#: classes/Admin/Popups.php:
|
441 |
msgid "Conditions"
|
442 |
msgstr ""
|
443 |
|
444 |
-
#: classes/Admin/Popups.php:
|
445 |
msgid "Display Presets"
|
446 |
msgstr ""
|
447 |
|
448 |
-
#: classes/Admin/Popups.php:
|
449 |
msgid "Appearance"
|
450 |
msgstr ""
|
451 |
|
452 |
-
#: classes/Admin/Popups.php:
|
453 |
msgid "Size"
|
454 |
msgstr ""
|
455 |
|
456 |
-
#: classes/Admin/Popups.php:
|
457 |
msgid "Animation"
|
458 |
msgstr ""
|
459 |
|
460 |
-
#: classes/Admin/Popups.php:
|
461 |
msgid "Sounds"
|
462 |
msgstr ""
|
463 |
|
464 |
-
#: classes/Admin/Popups.php:
|
465 |
msgid "Position"
|
466 |
msgstr ""
|
467 |
|
468 |
-
#: classes/Admin/Popups.php:
|
469 |
msgid "Button"
|
470 |
msgstr ""
|
471 |
|
472 |
-
#: classes/Admin/Popups.php:
|
473 |
msgid "Form Submission"
|
474 |
msgstr ""
|
475 |
|
476 |
-
#: classes/Admin/Popups.php:
|
477 |
msgid "Alternate Methods"
|
478 |
msgstr ""
|
479 |
|
480 |
-
#: classes/Admin/Popups.php:
|
481 |
msgid "Disable this popup on mobile devices."
|
482 |
msgstr ""
|
483 |
|
484 |
-
#: classes/Admin/Popups.php:
|
485 |
msgid "Disable this popup on tablet devices."
|
486 |
msgstr ""
|
487 |
|
488 |
-
#: classes/Admin/Popups.php:
|
489 |
msgid "Center Popup"
|
490 |
msgstr ""
|
491 |
|
492 |
-
#: classes/Admin/Popups.php:
|
493 |
msgid "Right Bottom Slide-in"
|
494 |
msgstr ""
|
495 |
|
496 |
-
#: classes/Admin/Popups.php:
|
497 |
msgid "Top Bar"
|
498 |
msgstr ""
|
499 |
|
500 |
-
#: classes/Admin/Popups.php:
|
501 |
msgid "Left Bottom Notice"
|
502 |
msgstr ""
|
503 |
|
504 |
-
#: classes/Admin/Popups.php:
|
505 |
msgid "Choose a theme for this popup."
|
506 |
msgstr ""
|
507 |
|
508 |
-
#: classes/Admin/Popups.php:
|
509 |
msgid "Customize This Theme"
|
510 |
msgstr ""
|
511 |
|
512 |
-
#: classes/Admin/Popups.php:
|
513 |
msgid "Select the size of the popup."
|
514 |
msgstr ""
|
515 |
|
516 |
-
#: classes/Admin/Popups.php:
|
517 |
msgid "Nano - 10%"
|
518 |
msgstr ""
|
519 |
|
520 |
-
#: classes/Admin/Popups.php:
|
521 |
msgid "Micro - 20%"
|
522 |
msgstr ""
|
523 |
|
524 |
-
#: classes/Admin/Popups.php:
|
525 |
msgid "Tiny - 30%"
|
526 |
msgstr ""
|
527 |
|
528 |
-
#: classes/Admin/Popups.php:
|
529 |
msgid "Small - 40%"
|
530 |
msgstr ""
|
531 |
|
532 |
-
#: classes/Admin/Popups.php:
|
533 |
msgid "Medium - 60%"
|
534 |
msgstr ""
|
535 |
|
536 |
-
#: classes/Admin/Popups.php:
|
537 |
msgid "Normal - 70%"
|
538 |
msgstr ""
|
539 |
|
540 |
-
#: classes/Admin/Popups.php:
|
541 |
msgid "Large - 80%"
|
542 |
msgstr ""
|
543 |
|
544 |
-
#: classes/Admin/Popups.php:
|
545 |
msgid "X Large - 95%"
|
546 |
msgstr ""
|
547 |
|
548 |
-
#: classes/Admin/Popups.php:
|
549 |
msgid "Auto"
|
550 |
msgstr ""
|
551 |
|
552 |
-
#: classes/Admin/Popups.php:
|
553 |
msgid "Custom"
|
554 |
msgstr ""
|
555 |
|
556 |
-
#: classes/Admin/Popups.php:
|
557 |
msgid "Min Width"
|
558 |
msgstr ""
|
559 |
|
560 |
-
#: classes/Admin/Popups.php:
|
561 |
msgid "Set a minimum width for the popup."
|
562 |
msgstr ""
|
563 |
|
564 |
-
#: classes/Admin/Popups.php:
|
565 |
msgid "Max Width"
|
566 |
msgstr ""
|
567 |
|
568 |
-
#: classes/Admin/Popups.php:
|
569 |
msgid "Set a maximum width for the popup."
|
570 |
msgstr ""
|
571 |
|
572 |
-
#: classes/Admin/Popups.php:
|
573 |
msgid "Width"
|
574 |
msgstr ""
|
575 |
|
576 |
-
#: classes/Admin/Popups.php:
|
577 |
msgid "Set a custom width for the popup."
|
578 |
msgstr ""
|
579 |
|
580 |
-
#: classes/Admin/Popups.php:
|
581 |
msgid "Auto Adjusted Height"
|
582 |
msgstr ""
|
583 |
|
584 |
-
#: classes/Admin/Popups.php:
|
585 |
msgid "Checking this option will set height to fit the content."
|
586 |
msgstr ""
|
587 |
|
588 |
-
#: classes/Admin/Popups.php:
|
589 |
msgid "Height"
|
590 |
msgstr ""
|
591 |
|
592 |
-
#: classes/Admin/Popups.php:
|
593 |
msgid "Set a custom height for the popup."
|
594 |
msgstr ""
|
595 |
|
596 |
-
#: classes/Admin/Popups.php:
|
597 |
msgid "Scrollable Content"
|
598 |
msgstr ""
|
599 |
|
600 |
-
#: classes/Admin/Popups.php:
|
601 |
msgid "Checking this option will add a scroll bar to your content."
|
602 |
msgstr ""
|
603 |
|
604 |
-
#: classes/Admin/Popups.php:
|
605 |
msgid "Animation Type"
|
606 |
msgstr ""
|
607 |
|
608 |
-
#: classes/Admin/Popups.php:
|
609 |
msgid "Select an animation type for your popup."
|
610 |
msgstr ""
|
611 |
|
612 |
-
#: classes/Admin/Popups.php:
|
613 |
msgid "Slide"
|
614 |
msgstr ""
|
615 |
|
616 |
-
#: classes/Admin/Popups.php:
|
617 |
msgid "Fade"
|
618 |
msgstr ""
|
619 |
|
620 |
-
#: classes/Admin/Popups.php:
|
621 |
msgid "Fade and Slide"
|
622 |
msgstr ""
|
623 |
|
624 |
-
#: classes/Admin/Popups.php:
|
625 |
msgid "Animation Speed"
|
626 |
msgstr ""
|
627 |
|
628 |
-
#: classes/Admin/Popups.php:
|
629 |
msgid "Set the animation speed for the popup."
|
630 |
msgstr ""
|
631 |
|
632 |
-
#: classes/Admin/Popups.php:
|
633 |
msgid "Animation Origin"
|
634 |
msgstr ""
|
635 |
|
636 |
-
#: classes/Admin/Popups.php:
|
637 |
msgid "Choose where the animation will begin."
|
638 |
msgstr ""
|
639 |
|
640 |
-
#: classes/Admin/Popups.php:
|
641 |
msgid "Top"
|
642 |
msgstr ""
|
643 |
|
644 |
-
#: classes/Admin/Popups.php:
|
645 |
msgid "Left"
|
646 |
msgstr ""
|
647 |
|
648 |
-
#: classes/Admin/Popups.php:
|
649 |
msgid "Bottom"
|
650 |
msgstr ""
|
651 |
|
652 |
-
#: classes/Admin/Popups.php:
|
653 |
msgid "Right"
|
654 |
msgstr ""
|
655 |
|
656 |
-
#: classes/Admin/Popups.php:
|
657 |
msgid "Top Left"
|
658 |
msgstr ""
|
659 |
|
660 |
-
#: classes/Admin/Popups.php:
|
661 |
msgid "Top Center"
|
662 |
msgstr ""
|
663 |
|
664 |
-
#: classes/Admin/Popups.php:
|
665 |
msgid "Top Right"
|
666 |
msgstr ""
|
667 |
|
668 |
-
#: classes/Admin/Popups.php:
|
669 |
msgid "Middle Left"
|
670 |
msgstr ""
|
671 |
|
672 |
-
#: classes/Admin/Popups.php:
|
673 |
msgid "Middle Center"
|
674 |
msgstr ""
|
675 |
|
676 |
-
#: classes/Admin/Popups.php:
|
677 |
msgid "Middle Right"
|
678 |
msgstr ""
|
679 |
|
680 |
-
#: classes/Admin/Popups.php:
|
681 |
msgid "Bottom Left"
|
682 |
msgstr ""
|
683 |
|
684 |
-
#: classes/Admin/Popups.php:
|
685 |
msgid "Bottom Center"
|
686 |
msgstr ""
|
687 |
|
688 |
-
#: classes/Admin/Popups.php:
|
689 |
msgid "Bottom Right"
|
690 |
msgstr ""
|
691 |
|
692 |
-
#: classes/Admin/Popups.php:
|
693 |
msgid "Opening Sound"
|
694 |
msgstr ""
|
695 |
|
696 |
-
#: classes/Admin/Popups.php:
|
697 |
msgid "Select a sound to play when the popup opens."
|
698 |
msgstr ""
|
699 |
|
700 |
-
#: classes/Admin/Popups.php:
|
701 |
msgid "Beep"
|
702 |
msgstr ""
|
703 |
|
704 |
-
#: classes/Admin/Popups.php:
|
705 |
msgid "Beep 2"
|
706 |
msgstr ""
|
707 |
|
708 |
-
#: classes/Admin/Popups.php:
|
709 |
msgid "Beep Up"
|
710 |
msgstr ""
|
711 |
|
712 |
-
#: classes/Admin/Popups.php:
|
713 |
msgid "Chimes"
|
714 |
msgstr ""
|
715 |
|
716 |
-
#: classes/Admin/Popups.php:
|
717 |
msgid "Correct"
|
718 |
msgstr ""
|
719 |
|
720 |
-
#: classes/Admin/Popups.php:
|
721 |
msgid "Custom Sound"
|
722 |
msgstr ""
|
723 |
|
724 |
-
#: classes/Admin/Popups.php:
|
725 |
msgid "Custom Sound URL"
|
726 |
msgstr ""
|
727 |
|
728 |
-
#: classes/Admin/Popups.php:
|
729 |
msgid "Enter URL to sound file."
|
730 |
msgstr ""
|
731 |
|
732 |
-
#: classes/Admin/Popups.php:
|
733 |
msgid "Location"
|
734 |
msgstr ""
|
735 |
|
736 |
-
#: classes/Admin/Popups.php:
|
737 |
msgid "Choose where the popup will be displayed."
|
738 |
msgstr ""
|
739 |
|
740 |
-
#: classes/Admin/Popups.php:
|
741 |
msgctxt "Screen Edge: top, bottom"
|
742 |
msgid "Distance from the %s edge of the screen."
|
743 |
msgstr ""
|
744 |
|
745 |
-
#: classes/Admin/Popups.php:
|
746 |
msgid "Position from Trigger"
|
747 |
msgstr ""
|
748 |
|
749 |
-
#: classes/Admin/Popups.php:
|
750 |
msgid "This will position the popup in relation to the %sClick Trigger%s."
|
751 |
msgstr ""
|
752 |
|
753 |
-
#: classes/Admin/Popups.php:
|
754 |
msgid "Fixed Postioning"
|
755 |
msgstr ""
|
756 |
|
757 |
-
#: classes/Admin/Popups.php:
|
758 |
msgid "Checking this sets the positioning of the popup to fixed."
|
759 |
msgstr ""
|
760 |
|
761 |
-
#: classes/Admin/Popups.php:
|
762 |
msgid "Disable Overlay"
|
763 |
msgstr ""
|
764 |
|
765 |
-
#: classes/Admin/Popups.php:
|
766 |
msgid "Checking this will disable and hide the overlay for this popup."
|
767 |
msgstr ""
|
768 |
|
769 |
-
#: classes/Admin/Popups.php:
|
770 |
msgid "Stackable"
|
771 |
msgstr ""
|
772 |
|
773 |
-
#: classes/Admin/Popups.php:
|
774 |
msgid "This enables other popups to remain open."
|
775 |
msgstr ""
|
776 |
|
777 |
-
#: classes/Admin/Popups.php:
|
778 |
msgid "Disable Repositioning"
|
779 |
msgstr ""
|
780 |
|
781 |
-
#: classes/Admin/Popups.php:
|
782 |
msgid "This will disable automatic repositioning of the popup on window resizing."
|
783 |
msgstr ""
|
784 |
|
785 |
-
#: classes/Admin/Popups.php:
|
786 |
msgid "Popup Z-Index"
|
787 |
msgstr ""
|
788 |
|
789 |
-
#: classes/Admin/Popups.php:
|
790 |
msgid "Change the z-index layer level for the popup."
|
791 |
msgstr ""
|
792 |
|
793 |
-
#: classes/Admin/Popups.php:
|
794 |
msgid "Close Text"
|
795 |
msgstr ""
|
796 |
|
797 |
-
#: classes/Admin/Popups.php:
|
798 |
msgid "Override the default close text. To use a Font Awesome icon instead of text, enter the CSS classes such as \"fas fa-camera\"."
|
799 |
msgstr ""
|
800 |
|
801 |
-
#: classes/Admin/Popups.php:
|
802 |
msgid "Close Button Delay"
|
803 |
msgstr ""
|
804 |
|
805 |
-
#: classes/Admin/Popups.php:
|
806 |
msgid "This delays the display of the close button."
|
807 |
msgstr ""
|
808 |
|
809 |
-
#: classes/Admin/Popups.php:
|
810 |
msgid "Close on Form Submission"
|
811 |
msgstr ""
|
812 |
|
813 |
-
#: classes/Admin/Popups.php:
|
814 |
msgid "Close the popup automatically after integrated form plugin submissions."
|
815 |
msgstr ""
|
816 |
|
817 |
-
#: classes/Admin/Popups.php:
|
818 |
msgid "Delay"
|
819 |
msgstr ""
|
820 |
|
821 |
-
#: classes/Admin/Popups.php:
|
822 |
msgid "The delay before the popup will close after submission (in milliseconds)."
|
823 |
msgstr ""
|
824 |
|
825 |
-
#: classes/Admin/Popups.php:
|
826 |
msgid "Click Overlay to Close"
|
827 |
msgstr ""
|
828 |
|
829 |
-
#: classes/Admin/Popups.php:
|
830 |
msgid "Checking this will cause popup to close when user clicks on overlay."
|
831 |
msgstr ""
|
832 |
|
833 |
-
#: classes/Admin/Popups.php:
|
834 |
msgid "Press ESC to Close"
|
835 |
msgstr ""
|
836 |
|
837 |
-
#: classes/Admin/Popups.php:
|
838 |
msgid "Checking this will cause popup to close when user presses ESC key."
|
839 |
msgstr ""
|
840 |
|
841 |
-
#: classes/Admin/Popups.php:
|
842 |
msgid "Press F4 to Close"
|
843 |
msgstr ""
|
844 |
|
845 |
-
#: classes/Admin/Popups.php:
|
846 |
msgid "Checking this will cause popup to close when user presses F4 key."
|
847 |
msgstr ""
|
848 |
|
849 |
-
#: classes/Admin/Popups.php:
|
850 |
msgid "Disable automatic re-triggering of popup after non-ajax form submission."
|
851 |
msgstr ""
|
852 |
|
853 |
-
#: classes/Admin/Popups.php:
|
854 |
msgid "Disable accessibility features."
|
855 |
msgstr ""
|
856 |
|
857 |
-
#: classes/Admin/Popups.php:
|
858 |
msgid "This includes trapping the tab key & focus inside popup while open, force focus the first element when popup open, and refocus last click trigger when closed."
|
859 |
msgstr ""
|
860 |
|
861 |
-
#: classes/Admin/Popups.php:
|
862 |
msgid "Opens"
|
863 |
msgstr ""
|
864 |
|
865 |
-
#: classes/Admin/Popups.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
866 |
msgid "Reset Counts"
|
867 |
msgstr ""
|
868 |
|
869 |
-
#: classes/Admin/Popups.php:
|
870 |
msgid "Last Reset"
|
871 |
msgstr ""
|
872 |
|
873 |
-
#: classes/Admin/Popups.php:
|
874 |
msgid "Previous Opens"
|
875 |
msgstr ""
|
876 |
|
877 |
-
#: classes/Admin/Popups.php:
|
|
|
|
|
|
|
|
|
878 |
msgid "Lifetime Opens"
|
879 |
msgstr ""
|
880 |
|
881 |
-
#: classes/Admin/Popups.php:
|
|
|
|
|
|
|
|
|
882 |
msgid "Name"
|
883 |
msgstr ""
|
884 |
|
885 |
-
#: classes/Admin/Popups.php:
|
886 |
msgid "Enabled"
|
887 |
msgstr ""
|
888 |
|
889 |
-
#: classes/Admin/Popups.php:
|
890 |
msgid "Title"
|
891 |
msgstr ""
|
892 |
|
893 |
-
#: classes/Admin/Popups.php:
|
894 |
-
msgid "CSS
|
895 |
msgstr ""
|
896 |
|
897 |
-
#: classes/Admin/Popups.php:
|
898 |
msgid "Show all categories"
|
899 |
msgstr ""
|
900 |
|
901 |
-
#: classes/Admin/Popups.php:
|
902 |
msgid "Show all tags"
|
903 |
msgstr ""
|
904 |
|
@@ -946,10 +982,6 @@ msgstr ""
|
|
946 |
msgid "Allow Popup Maker to track this plugin's usage and help us make this plugin better? No user data is sent to our servers. No sensitive data is tracked."
|
947 |
msgstr ""
|
948 |
|
949 |
-
#: classes/Admin/Settings.php:260, classes/AssetCache.php:608, classes/Telemetry.php:268
|
950 |
-
msgid "Learn more"
|
951 |
-
msgstr ""
|
952 |
-
|
953 |
#: classes/Admin/Settings.php:271
|
954 |
msgid "Default Newsletter Provider"
|
955 |
msgstr ""
|
@@ -1119,27 +1151,27 @@ msgid "Try to bypass ad blockers."
|
|
1119 |
msgstr ""
|
1120 |
|
1121 |
#: classes/Admin/Settings.php:428
|
1122 |
-
msgid "Ad blocker:
|
1123 |
msgstr ""
|
1124 |
|
1125 |
#: classes/Admin/Settings.php:429
|
1126 |
-
msgid "This will help generate unique
|
1127 |
msgstr ""
|
1128 |
|
1129 |
#: classes/Admin/Settings.php:432
|
1130 |
-
msgid "
|
1131 |
msgstr ""
|
1132 |
|
1133 |
#: classes/Admin/Settings.php:433
|
1134 |
-
msgid "Custom
|
1135 |
msgstr ""
|
1136 |
|
1137 |
#: classes/Admin/Settings.php:443
|
1138 |
-
msgid "Ad blocker: Custom
|
1139 |
msgstr ""
|
1140 |
|
1141 |
#: classes/Admin/Settings.php:444
|
1142 |
-
msgid "A custom & recognizable
|
1143 |
msgstr ""
|
1144 |
|
1145 |
#: classes/Admin/Settings.php:452
|
@@ -1195,86 +1227,90 @@ msgid "Disable the Popup Maker shortcode button"
|
|
1195 |
msgstr ""
|
1196 |
|
1197 |
#: classes/Admin/Settings.php:495
|
|
|
|
|
|
|
|
|
1198 |
msgid "Delete all Popup Maker data on deactivation"
|
1199 |
msgstr ""
|
1200 |
|
1201 |
-
#: classes/Admin/Settings.php:
|
1202 |
msgid "Check this to completely uninstall Popup Maker."
|
1203 |
msgstr ""
|
1204 |
|
1205 |
-
#: classes/Admin/Settings.php:
|
1206 |
msgid "'Don't Load Google Fonts"
|
1207 |
msgstr ""
|
1208 |
|
1209 |
-
#: classes/Admin/Settings.php:
|
1210 |
msgid "Check this disable loading of google fonts, useful if the fonts you chose are already loaded with your theme."
|
1211 |
msgstr ""
|
1212 |
|
1213 |
-
#: classes/Admin/Settings.php:
|
1214 |
msgid "Don't load Popup Maker core stylesheet."
|
1215 |
msgstr ""
|
1216 |
|
1217 |
-
#: classes/Admin/Settings.php:
|
1218 |
msgid "Check this if you have copied the Popup Maker core styles to your own stylesheet or are using custom styles."
|
1219 |
msgstr ""
|
1220 |
|
1221 |
-
#: classes/Admin/Settings.php:
|
1222 |
msgid "Don't load popup theme styles to the head."
|
1223 |
msgstr ""
|
1224 |
|
1225 |
-
#: classes/Admin/Settings.php:
|
1226 |
msgid "Check this if you have copied the popup theme styles to your own stylesheet or are using custom styles."
|
1227 |
msgstr ""
|
1228 |
|
1229 |
-
#: classes/Admin/Settings.php:
|
1230 |
msgid "Show Popup Maker CSS"
|
1231 |
msgstr ""
|
1232 |
|
1233 |
-
#: classes/Admin/Settings.php:
|
1234 |
msgid "Use this to quickly copy Popup Maker's CSS to your own stylesheet."
|
1235 |
msgstr ""
|
1236 |
|
1237 |
-
#: classes/Admin/Settings.php:
|
1238 |
msgid "Core Styles"
|
1239 |
msgstr ""
|
1240 |
|
1241 |
-
#: classes/Admin/Settings.php:
|
1242 |
msgid "Generated Popup & Popup Theme Styles"
|
1243 |
msgstr ""
|
1244 |
|
1245 |
-
#: classes/Admin/Settings.php:
|
1246 |
msgid "Popup Maker Settings"
|
1247 |
msgstr ""
|
1248 |
|
1249 |
-
#: classes/Admin/Settings.php:
|
1250 |
msgid "Subscriptions"
|
1251 |
msgstr ""
|
1252 |
|
1253 |
-
#: classes/Admin/Settings.php:
|
1254 |
msgid "Extensions"
|
1255 |
msgstr ""
|
1256 |
|
1257 |
-
#: classes/Admin/Settings.php:
|
1258 |
msgid "Licenses"
|
1259 |
msgstr ""
|
1260 |
|
1261 |
-
#: classes/Admin/Settings.php:
|
1262 |
msgid "Privacy"
|
1263 |
msgstr ""
|
1264 |
|
1265 |
-
#: classes/Admin/Settings.php:
|
1266 |
msgid "Misc"
|
1267 |
msgstr ""
|
1268 |
|
1269 |
-
#: classes/Admin/Settings.php:
|
1270 |
msgid "Extension Settings"
|
1271 |
msgstr ""
|
1272 |
|
1273 |
-
#: classes/Admin/Settings.php:
|
1274 |
msgid "Subscription Forms"
|
1275 |
msgstr ""
|
1276 |
|
1277 |
-
#: classes/Admin/Settings.php:
|
1278 |
msgid "Assets"
|
1279 |
msgstr ""
|
1280 |
|
@@ -1795,11 +1831,11 @@ msgstr ""
|
|
1795 |
msgid "Import From Easy Modal v2"
|
1796 |
msgstr ""
|
1797 |
|
1798 |
-
#: classes/Analytics.php:
|
1799 |
msgid "Event Type"
|
1800 |
msgstr ""
|
1801 |
|
1802 |
-
#: classes/Analytics.php:
|
1803 |
msgid "Popup ID"
|
1804 |
msgstr ""
|
1805 |
|
@@ -2035,11 +2071,15 @@ msgstr ""
|
|
2035 |
msgid "%1$s"
|
2036 |
msgstr ""
|
2037 |
|
2038 |
-
#: classes/Extension/License.php:
|
2039 |
msgid "You have invalid or expired license keys for Popup Maker. Please go to the %sLicenses page%s to correct this issue."
|
2040 |
msgstr ""
|
2041 |
|
2042 |
-
#: classes/Extension/License.php:
|
|
|
|
|
|
|
|
|
2043 |
msgid "Enter valid license key for automatic updates."
|
2044 |
msgstr ""
|
2045 |
|
@@ -2347,10 +2387,6 @@ msgstr ""
|
|
2347 |
msgid "Enter the target value for your link. Can be left blank."
|
2348 |
msgstr ""
|
2349 |
|
2350 |
-
#: classes/Shortcode/PopupClose.php:89, classes/Shortcode/PopupTrigger.php:112, classes/Shortcode/PopupTrigger.php:113
|
2351 |
-
msgid "CSS Class"
|
2352 |
-
msgstr ""
|
2353 |
-
|
2354 |
#: classes/Shortcode/PopupClose.php:92, classes/Shortcode/PopupTrigger.php:115
|
2355 |
msgid "Add additional classes for styling."
|
2356 |
msgstr ""
|
@@ -2708,7 +2744,7 @@ msgstr ""
|
|
2708 |
msgid "Choose which cookies will disable this trigger?"
|
2709 |
msgstr ""
|
2710 |
|
2711 |
-
#: classes/Types.php:21, classes/Upsell.php:
|
2712 |
msgid "Popups"
|
2713 |
msgstr ""
|
2714 |
|
@@ -2778,21 +2814,21 @@ msgid "%1$s submitted."
|
|
2778 |
msgstr ""
|
2779 |
|
2780 |
#. translators: %s url to product page.
|
2781 |
-
#: classes/Upsell.php:
|
2782 |
msgid "Want to disable the close button? Check out <a href=\"%s\" target=\"_blank\">Forced Interaction</a>!"
|
2783 |
msgstr ""
|
2784 |
|
2785 |
#. translators: %s url to product page.
|
2786 |
-
#: classes/Upsell.php:
|
2787 |
msgid "Need more <a href=\"%s\" target=\"_blank\">advanced targeting</a> options?"
|
2788 |
msgstr ""
|
2789 |
|
2790 |
#. translators: %s url to product page.
|
2791 |
-
#: classes/Upsell.php:
|
2792 |
msgid "Want to use <a href=\"%s\" target=\"_blank\">background images</a>?"
|
2793 |
msgstr ""
|
2794 |
|
2795 |
-
#: classes/Upsell.php:
|
2796 |
msgid "Extensions and Integrations"
|
2797 |
msgstr ""
|
2798 |
|
@@ -2837,7 +2873,7 @@ msgstr ""
|
|
2837 |
msgid "Check out the following notifications from Popup Maker."
|
2838 |
msgstr ""
|
2839 |
|
2840 |
-
#: classes/Utils/Alerts.php:
|
2841 |
msgid "Dismiss this item."
|
2842 |
msgstr ""
|
2843 |
|
6 |
"MIME-Version: 1.0\n"
|
7 |
"Content-Type: text/plain; charset=UTF-8\n"
|
8 |
"Content-Transfer-Encoding: 8bit\n"
|
9 |
+
"Language-Team: Popup Maker <support@wppopupmaker.com>\n"
|
10 |
"Report-Msgid-Bugs-To: https://wppopupmaker.com/support/\n"
|
11 |
"X-Poedit-Basepath: ..\n"
|
12 |
"X-Poedit-KeywordsList: __;_e;_ex:1,2c;_n:1,2;_n_noop:1,2;_nx:1,2,4c;_nx_noop:1,2,3c;_x:1,2c;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c\n"
|
89 |
msgid "Add"
|
90 |
msgstr ""
|
91 |
|
92 |
+
#: classes/Admin/Assets.php:69, classes/Admin/Settings.php:605, classes/Admin/Settings.php:634, classes/Admin/Tools.php:86, classes/Admin/Tools.php:202, includes/integrations/class-pum-gravity-forms.php:173
|
93 |
msgid "Save"
|
94 |
msgstr ""
|
95 |
|
113 |
msgid "Are you sure you want to delete this cookie?"
|
114 |
msgstr ""
|
115 |
|
116 |
+
#: classes/Admin/Assets.php:75, classes/Admin/Popups.php:580, classes/Admin/Popups.php:636, classes/Admin/Settings.php:275, classes/Admin/Themes.php:387, classes/Shortcode/Subscribe.php:124, classes/Shortcode/Subscribe.php:135, classes/Shortcode/Subscribe.php:291
|
117 |
msgid "None"
|
118 |
msgstr ""
|
119 |
|
257 |
msgid "Get this Extension"
|
258 |
msgstr ""
|
259 |
|
260 |
+
#: classes/Admin/Helpers.php:204, classes/Admin/Popups.php:596, classes/Admin/Popups.php:792, classes/Admin/Popups.php:909, classes/Shortcode/Popup.php:228, classes/Utils/Fields.php:128, includes/class-popmake-fields.php:175
|
261 |
msgid "ms"
|
262 |
msgstr ""
|
263 |
|
264 |
+
#: classes/Admin/Helpers.php:373, classes/Admin/Popups.php:365, classes/Admin/Popups.php:779, classes/Admin/Templates.php:334, classes/Admin/Themes.php:165, classes/Admin/Themes.php:335, classes/Shortcode/Popup.php:55, classes/Shortcode/Popup.php:77, templates/popup.php:44
|
265 |
msgid "Close"
|
266 |
msgstr ""
|
267 |
|
268 |
+
#: classes/Admin/Onboarding.php:54, classes/Admin/Settings.php:260, classes/AssetCache.php:608, classes/Telemetry.php:268
|
269 |
+
msgid "Learn more"
|
270 |
+
msgstr ""
|
271 |
+
|
272 |
+
#: classes/Admin/Onboarding.php:60
|
273 |
+
msgid "Dismiss"
|
274 |
+
msgstr ""
|
275 |
+
|
276 |
+
#: classes/Admin/Onboarding.php:66
|
277 |
+
msgid "Turn off these occasional tips"
|
278 |
+
msgstr ""
|
279 |
+
|
280 |
+
#: classes/Admin/Onboarding.php:185, classes/Admin/Popups.php:115
|
281 |
msgid "Popup Name"
|
282 |
msgstr ""
|
283 |
|
284 |
+
#: classes/Admin/Onboarding.php:186
|
285 |
msgid "Name your popup so you can find it later. Site visitors will not see this."
|
286 |
msgstr ""
|
287 |
|
288 |
+
#: classes/Admin/Onboarding.php:195
|
289 |
msgid "Popup Content"
|
290 |
msgstr ""
|
291 |
|
292 |
+
#: classes/Admin/Onboarding.php:196
|
293 |
msgid "Add content for your popup here."
|
294 |
msgstr ""
|
295 |
|
296 |
+
#: classes/Admin/Onboarding.php:205
|
297 |
msgid "Popup Triggers"
|
298 |
msgstr ""
|
299 |
|
300 |
+
#: classes/Admin/Onboarding.php:206
|
301 |
msgid "Use triggers to choose what causes the popup to open."
|
302 |
msgstr ""
|
303 |
|
304 |
+
#: classes/Admin/Onboarding.php:215
|
305 |
msgid "Popup Targeting"
|
306 |
msgstr ""
|
307 |
|
308 |
+
#: classes/Admin/Onboarding.php:216
|
309 |
msgid "Use targeting to choose where on your site the popup should load and who to show the popup to."
|
310 |
msgstr ""
|
311 |
|
312 |
+
#: classes/Admin/Onboarding.php:225
|
313 |
msgid "Popup Display"
|
314 |
msgstr ""
|
315 |
|
316 |
+
#: classes/Admin/Onboarding.php:226
|
317 |
msgid "Use display settings to choose where on the screen the popup appears and what it looks like."
|
318 |
msgstr ""
|
319 |
|
320 |
+
#: classes/Admin/Onboarding.php:235, classes/Admin/Popups.php:110, classes/Admin/Popups.php:479, classes/Shortcode/Popup.php:105, classes/Types.php:54, classes/Types.php:168, classes/Upsell.php:98
|
321 |
msgid "Popup Theme"
|
322 |
msgstr ""
|
323 |
|
324 |
+
#: classes/Admin/Onboarding.php:236
|
325 |
msgid "Choose the popup theme which controls the visual appearance of your popup including; colors, spacing, and fonts."
|
326 |
msgstr ""
|
327 |
|
328 |
+
#: classes/Admin/Onboarding.php:262
|
329 |
msgid "Welcome to Popup Maker!"
|
330 |
msgstr ""
|
331 |
|
332 |
+
#: classes/Admin/Onboarding.php:263
|
333 |
msgid "Click the \"Add New Popup\" button to create your first popup."
|
334 |
msgstr ""
|
335 |
|
336 |
+
#: classes/Admin/Onboarding.php:272
|
337 |
+
msgid "Adjust Columns"
|
338 |
+
msgstr ""
|
339 |
+
|
340 |
+
#: classes/Admin/Onboarding.php:273
|
341 |
+
msgid "You can show or hide columns from the table on this page using the Screen Options. Popup Heading and Published Date are hidden by default."
|
342 |
+
msgstr ""
|
343 |
+
|
344 |
#: classes/Admin/Pages.php:52, classes/Admin/Subscribers.php:30
|
345 |
msgid "Subscribers"
|
346 |
msgstr ""
|
357 |
msgid "Tools"
|
358 |
msgstr ""
|
359 |
|
360 |
+
#: classes/Admin/Pages.php:107, classes/Admin/Pages.php:107, classes/Types.php:54, classes/Types.php:56, classes/Upsell.php:98
|
361 |
msgid "Popup Themes"
|
362 |
msgstr ""
|
363 |
|
373 |
msgid "All Themes"
|
374 |
msgstr ""
|
375 |
|
376 |
+
#: classes/Admin/Pages.php:145, classes/Admin/Popups.php:1210
|
377 |
msgid "Categories"
|
378 |
msgstr ""
|
379 |
|
380 |
+
#: classes/Admin/Pages.php:146, classes/Admin/Popups.php:1206
|
381 |
msgid "Tags"
|
382 |
msgstr ""
|
383 |
|
393 |
msgid "Contact Us"
|
394 |
msgstr ""
|
395 |
|
396 |
+
#: classes/Admin/Popups.php:110, classes/Admin/Subscribers/Table.php:94, classes/Shortcode/Popup.php:28, classes/Shortcode/Popup.php:378, classes/Shortcode/Subscribe.php:93, classes/Types.php:21, classes/Types.php:167, classes/Upsell.php:97, includes/integrations/class-pum-cf7.php:167, includes/integrations/class-pum-gravity-forms.php:158, includes/modules/menus.php:55
|
397 |
msgid "Popup"
|
398 |
msgstr ""
|
399 |
|
400 |
+
#: classes/Admin/Popups.php:140, classes/Admin/Popups.php:142, classes/Shortcode/Popup.php:94
|
401 |
msgid "Popup Title"
|
402 |
msgstr ""
|
403 |
|
404 |
+
#: classes/Admin/Popups.php:143
|
405 |
msgid "Optional"
|
406 |
msgstr ""
|
407 |
|
408 |
+
#: classes/Admin/Popups.php:143
|
409 |
msgid "Shown as headline inside the popup. Can be left blank."
|
410 |
msgstr ""
|
411 |
|
412 |
+
#: classes/Admin/Popups.php:167
|
413 |
msgid "Required"
|
414 |
msgstr ""
|
415 |
|
416 |
+
#: classes/Admin/Popups.php:167
|
417 |
msgid "Enter a name to help you remember what this popup is about. Only you will see this."
|
418 |
msgstr ""
|
419 |
|
420 |
+
#: classes/Admin/Popups.php:176, includes/integrations/class-pum-cf7.php:119, includes/integrations/class-pum-cf7.php:133, includes/integrations/class-pum-gravity-forms.php:119
|
421 |
msgid "Popup Settings"
|
422 |
msgstr ""
|
423 |
|
424 |
+
#: classes/Admin/Popups.php:177, classes/Privacy.php:102
|
425 |
msgid "Analytics"
|
426 |
msgstr ""
|
427 |
|
428 |
+
#: classes/Admin/Popups.php:230, classes/Admin/Settings.php:611, classes/Admin/Themes.php:135
|
429 |
msgid "If you are seeing this, the page is still loading or there are Javascript errors on this page. %sView troubleshooting guide%s"
|
430 |
msgstr ""
|
431 |
|
432 |
+
#: classes/Admin/Popups.php:363, classes/Admin/Settings.php:670, classes/Admin/Settings.php:694, classes/Admin/Settings.php:697, classes/Admin/Settings.php:706, classes/Admin/Themes.php:330, classes/Admin/Themes.php:348, classes/Admin/Themes.php:367, classes/Conditions.php:409, classes/Conditions.php:423, classes/Conditions.php:429, classes/Cookies.php:193, classes/Shortcode.php:151, classes/Shortcode.php:163, classes/Shortcode.php:176, classes/Shortcode/Popup.php:51, classes/Shortcode/Popup.php:65, classes/Shortcode/Subscribe.php:60, classes/Shortcode/Subscribe.php:80, classes/Shortcode/Subscribe.php:83, classes/Triggers.php:361, includes/class-popmake-fields.php:57
|
433 |
msgid "General"
|
434 |
msgstr ""
|
435 |
|
436 |
+
#: classes/Admin/Popups.php:364, classes/Shortcode/Popup.php:52, classes/Shortcode/Popup.php:68
|
437 |
msgid "Display"
|
438 |
msgstr ""
|
439 |
|
440 |
+
#: classes/Admin/Popups.php:366, classes/Site/Assets.php:246
|
441 |
msgid "Triggers"
|
442 |
msgstr ""
|
443 |
|
444 |
+
#: classes/Admin/Popups.php:367
|
445 |
msgid "Targeting"
|
446 |
msgstr ""
|
447 |
|
448 |
+
#: classes/Admin/Popups.php:368, classes/Admin/Popups.php:395, classes/Admin/Popups.php:403, classes/Admin/Themes.php:336, classes/Admin/Themes.php:377, classes/Cookies.php:194, classes/Triggers.php:363
|
449 |
msgid "Advanced"
|
450 |
msgstr ""
|
451 |
|
452 |
+
#: classes/Admin/Popups.php:380
|
453 |
msgid "General Settings"
|
454 |
msgstr ""
|
455 |
|
456 |
+
#: classes/Admin/Popups.php:383
|
457 |
msgid "Triggers & Cookies"
|
458 |
msgstr ""
|
459 |
|
460 |
+
#: classes/Admin/Popups.php:386, classes/Site/Assets.php:249
|
461 |
msgid "Conditions"
|
462 |
msgstr ""
|
463 |
|
464 |
+
#: classes/Admin/Popups.php:389
|
465 |
msgid "Display Presets"
|
466 |
msgstr ""
|
467 |
|
468 |
+
#: classes/Admin/Popups.php:390, classes/Shortcode/Subscribe.php:86
|
469 |
msgid "Appearance"
|
470 |
msgstr ""
|
471 |
|
472 |
+
#: classes/Admin/Popups.php:391, classes/Admin/Popups.php:488, classes/Admin/Themes.php:368, classes/Shortcode/Popup.php:122
|
473 |
msgid "Size"
|
474 |
msgstr ""
|
475 |
|
476 |
+
#: classes/Admin/Popups.php:392, classes/Shortcode/Popup.php:54, classes/Shortcode/Popup.php:74
|
477 |
msgid "Animation"
|
478 |
msgstr ""
|
479 |
|
480 |
+
#: classes/Admin/Popups.php:393
|
481 |
msgid "Sounds"
|
482 |
msgstr ""
|
483 |
|
484 |
+
#: classes/Admin/Popups.php:394, classes/Admin/Themes.php:369, classes/Shortcode/Popup.php:53, classes/Shortcode/Popup.php:71
|
485 |
msgid "Position"
|
486 |
msgstr ""
|
487 |
|
488 |
+
#: classes/Admin/Popups.php:398
|
489 |
msgid "Button"
|
490 |
msgstr ""
|
491 |
|
492 |
+
#: classes/Admin/Popups.php:399, classes/Cookies.php:84, classes/Triggers.php:210
|
493 |
msgid "Form Submission"
|
494 |
msgstr ""
|
495 |
|
496 |
+
#: classes/Admin/Popups.php:400
|
497 |
msgid "Alternate Methods"
|
498 |
msgstr ""
|
499 |
|
500 |
+
#: classes/Admin/Popups.php:449
|
501 |
msgid "Disable this popup on mobile devices."
|
502 |
msgstr ""
|
503 |
|
504 |
+
#: classes/Admin/Popups.php:454
|
505 |
msgid "Disable this popup on tablet devices."
|
506 |
msgstr ""
|
507 |
|
508 |
+
#: classes/Admin/Popups.php:470, classes/Admin/Popups.php:470
|
509 |
msgid "Center Popup"
|
510 |
msgstr ""
|
511 |
|
512 |
+
#: classes/Admin/Popups.php:471, classes/Admin/Popups.php:471
|
513 |
msgid "Right Bottom Slide-in"
|
514 |
msgstr ""
|
515 |
|
516 |
+
#: classes/Admin/Popups.php:472, classes/Admin/Popups.php:472
|
517 |
msgid "Top Bar"
|
518 |
msgstr ""
|
519 |
|
520 |
+
#: classes/Admin/Popups.php:473, classes/Admin/Popups.php:473
|
521 |
msgid "Left Bottom Notice"
|
522 |
msgstr ""
|
523 |
|
524 |
+
#: classes/Admin/Popups.php:480
|
525 |
msgid "Choose a theme for this popup."
|
526 |
msgstr ""
|
527 |
|
528 |
+
#: classes/Admin/Popups.php:480, classes/Admin/Settings.php:241
|
529 |
msgid "Customize This Theme"
|
530 |
msgstr ""
|
531 |
|
532 |
+
#: classes/Admin/Popups.php:489, classes/Shortcode/Popup.php:123
|
533 |
msgid "Select the size of the popup."
|
534 |
msgstr ""
|
535 |
|
536 |
+
#: classes/Admin/Popups.php:495
|
537 |
msgid "Nano - 10%"
|
538 |
msgstr ""
|
539 |
|
540 |
+
#: classes/Admin/Popups.php:496
|
541 |
msgid "Micro - 20%"
|
542 |
msgstr ""
|
543 |
|
544 |
+
#: classes/Admin/Popups.php:497
|
545 |
msgid "Tiny - 30%"
|
546 |
msgstr ""
|
547 |
|
548 |
+
#: classes/Admin/Popups.php:498
|
549 |
msgid "Small - 40%"
|
550 |
msgstr ""
|
551 |
|
552 |
+
#: classes/Admin/Popups.php:499
|
553 |
msgid "Medium - 60%"
|
554 |
msgstr ""
|
555 |
|
556 |
+
#: classes/Admin/Popups.php:500
|
557 |
msgid "Normal - 70%"
|
558 |
msgstr ""
|
559 |
|
560 |
+
#: classes/Admin/Popups.php:501
|
561 |
msgid "Large - 80%"
|
562 |
msgstr ""
|
563 |
|
564 |
+
#: classes/Admin/Popups.php:502
|
565 |
msgid "X Large - 95%"
|
566 |
msgstr ""
|
567 |
|
568 |
+
#: classes/Admin/Popups.php:505
|
569 |
msgid "Auto"
|
570 |
msgstr ""
|
571 |
|
572 |
+
#: classes/Admin/Popups.php:506, classes/Shortcode/PopupTrigger.php:86
|
573 |
msgid "Custom"
|
574 |
msgstr ""
|
575 |
|
576 |
+
#: classes/Admin/Popups.php:511
|
577 |
msgid "Min Width"
|
578 |
msgstr ""
|
579 |
|
580 |
+
#: classes/Admin/Popups.php:512
|
581 |
msgid "Set a minimum width for the popup."
|
582 |
msgstr ""
|
583 |
|
584 |
+
#: classes/Admin/Popups.php:521
|
585 |
msgid "Max Width"
|
586 |
msgstr ""
|
587 |
|
588 |
+
#: classes/Admin/Popups.php:522
|
589 |
msgid "Set a maximum width for the popup."
|
590 |
msgstr ""
|
591 |
|
592 |
+
#: classes/Admin/Popups.php:531, classes/Admin/Themes.php:895, classes/Shortcode/Popup.php:130
|
593 |
msgid "Width"
|
594 |
msgstr ""
|
595 |
|
596 |
+
#: classes/Admin/Popups.php:532
|
597 |
msgid "Set a custom width for the popup."
|
598 |
msgstr ""
|
599 |
|
600 |
+
#: classes/Admin/Popups.php:541
|
601 |
msgid "Auto Adjusted Height"
|
602 |
msgstr ""
|
603 |
|
604 |
+
#: classes/Admin/Popups.php:542
|
605 |
msgid "Checking this option will set height to fit the content."
|
606 |
msgstr ""
|
607 |
|
608 |
+
#: classes/Admin/Popups.php:550, classes/Admin/Themes.php:885, classes/Shortcode/Popup.php:141
|
609 |
msgid "Height"
|
610 |
msgstr ""
|
611 |
|
612 |
+
#: classes/Admin/Popups.php:551
|
613 |
msgid "Set a custom height for the popup."
|
614 |
msgstr ""
|
615 |
|
616 |
+
#: classes/Admin/Popups.php:561
|
617 |
msgid "Scrollable Content"
|
618 |
msgstr ""
|
619 |
|
620 |
+
#: classes/Admin/Popups.php:562
|
621 |
msgid "Checking this option will add a scroll bar to your content."
|
622 |
msgstr ""
|
623 |
|
624 |
+
#: classes/Admin/Popups.php:574, classes/Shortcode/Popup.php:212
|
625 |
msgid "Animation Type"
|
626 |
msgstr ""
|
627 |
|
628 |
+
#: classes/Admin/Popups.php:575, classes/Shortcode/Popup.php:213
|
629 |
msgid "Select an animation type for your popup."
|
630 |
msgstr ""
|
631 |
|
632 |
+
#: classes/Admin/Popups.php:581
|
633 |
msgid "Slide"
|
634 |
msgstr ""
|
635 |
|
636 |
+
#: classes/Admin/Popups.php:582
|
637 |
msgid "Fade"
|
638 |
msgstr ""
|
639 |
|
640 |
+
#: classes/Admin/Popups.php:583
|
641 |
msgid "Fade and Slide"
|
642 |
msgstr ""
|
643 |
|
644 |
+
#: classes/Admin/Popups.php:589, classes/Shortcode/Popup.php:220
|
645 |
msgid "Animation Speed"
|
646 |
msgstr ""
|
647 |
|
648 |
+
#: classes/Admin/Popups.php:590, classes/Shortcode/Popup.php:221
|
649 |
msgid "Set the animation speed for the popup."
|
650 |
msgstr ""
|
651 |
|
652 |
+
#: classes/Admin/Popups.php:603, classes/Shortcode/Popup.php:231
|
653 |
msgid "Animation Origin"
|
654 |
msgstr ""
|
655 |
|
656 |
+
#: classes/Admin/Popups.php:604, classes/Shortcode/Popup.php:232
|
657 |
msgid "Choose where the animation will begin."
|
658 |
msgstr ""
|
659 |
|
660 |
+
#: classes/Admin/Popups.php:608, classes/Admin/Popups.php:676, classes/Admin/Popups.php:677, classes/Admin/Themes.php:819, classes/Shortcode/Popup.php:164, classes/Shortcode/Popup.php:165
|
661 |
msgid "Top"
|
662 |
msgstr ""
|
663 |
|
664 |
+
#: classes/Admin/Popups.php:609, classes/Admin/Popups.php:704, classes/Admin/Popups.php:705, classes/Admin/Themes.php:695, classes/Admin/Themes.php:846, classes/Shortcode/Popup.php:186, classes/Shortcode/Popup.php:187, classes/Shortcode/Subscribe.php:279
|
665 |
msgid "Left"
|
666 |
msgstr ""
|
667 |
|
668 |
+
#: classes/Admin/Popups.php:610, classes/Admin/Popups.php:690, classes/Admin/Popups.php:691, classes/Admin/Themes.php:833, classes/Shortcode/Popup.php:175, classes/Shortcode/Popup.php:176
|
669 |
msgid "Bottom"
|
670 |
msgstr ""
|
671 |
|
672 |
+
#: classes/Admin/Popups.php:611, classes/Admin/Popups.php:718, classes/Admin/Popups.php:719, classes/Admin/Themes.php:697, classes/Admin/Themes.php:859, classes/Shortcode/Popup.php:197, classes/Shortcode/Popup.php:198, classes/Shortcode/Subscribe.php:281
|
673 |
msgid "Right"
|
674 |
msgstr ""
|
675 |
|
676 |
+
#: classes/Admin/Popups.php:612, classes/Admin/Popups.php:664, classes/Admin/Themes.php:808
|
677 |
msgid "Top Left"
|
678 |
msgstr ""
|
679 |
|
680 |
+
#: classes/Admin/Popups.php:613, classes/Admin/Popups.php:665, classes/Admin/Themes.php:809
|
681 |
msgid "Top Center"
|
682 |
msgstr ""
|
683 |
|
684 |
+
#: classes/Admin/Popups.php:614, classes/Admin/Popups.php:666, classes/Admin/Themes.php:810
|
685 |
msgid "Top Right"
|
686 |
msgstr ""
|
687 |
|
688 |
+
#: classes/Admin/Popups.php:615, classes/Admin/Popups.php:667, classes/Admin/Themes.php:811
|
689 |
msgid "Middle Left"
|
690 |
msgstr ""
|
691 |
|
692 |
+
#: classes/Admin/Popups.php:616, classes/Admin/Popups.php:668
|
693 |
msgid "Middle Center"
|
694 |
msgstr ""
|
695 |
|
696 |
+
#: classes/Admin/Popups.php:617, classes/Admin/Popups.php:669, classes/Admin/Themes.php:812
|
697 |
msgid "Middle Right"
|
698 |
msgstr ""
|
699 |
|
700 |
+
#: classes/Admin/Popups.php:618, classes/Admin/Popups.php:670, classes/Admin/Themes.php:813
|
701 |
msgid "Bottom Left"
|
702 |
msgstr ""
|
703 |
|
704 |
+
#: classes/Admin/Popups.php:619, classes/Admin/Popups.php:671, classes/Admin/Themes.php:814
|
705 |
msgid "Bottom Center"
|
706 |
msgstr ""
|
707 |
|
708 |
+
#: classes/Admin/Popups.php:620, classes/Admin/Popups.php:672, classes/Admin/Themes.php:815
|
709 |
msgid "Bottom Right"
|
710 |
msgstr ""
|
711 |
|
712 |
+
#: classes/Admin/Popups.php:630
|
713 |
msgid "Opening Sound"
|
714 |
msgstr ""
|
715 |
|
716 |
+
#: classes/Admin/Popups.php:631
|
717 |
msgid "Select a sound to play when the popup opens."
|
718 |
msgstr ""
|
719 |
|
720 |
+
#: classes/Admin/Popups.php:637
|
721 |
msgid "Beep"
|
722 |
msgstr ""
|
723 |
|
724 |
+
#: classes/Admin/Popups.php:638
|
725 |
msgid "Beep 2"
|
726 |
msgstr ""
|
727 |
|
728 |
+
#: classes/Admin/Popups.php:639
|
729 |
msgid "Beep Up"
|
730 |
msgstr ""
|
731 |
|
732 |
+
#: classes/Admin/Popups.php:640
|
733 |
msgid "Chimes"
|
734 |
msgstr ""
|
735 |
|
736 |
+
#: classes/Admin/Popups.php:641
|
737 |
msgid "Correct"
|
738 |
msgstr ""
|
739 |
|
740 |
+
#: classes/Admin/Popups.php:642
|
741 |
msgid "Custom Sound"
|
742 |
msgstr ""
|
743 |
|
744 |
+
#: classes/Admin/Popups.php:646
|
745 |
msgid "Custom Sound URL"
|
746 |
msgstr ""
|
747 |
|
748 |
+
#: classes/Admin/Popups.php:647
|
749 |
msgid "Enter URL to sound file."
|
750 |
msgstr ""
|
751 |
|
752 |
+
#: classes/Admin/Popups.php:658, classes/Admin/Themes.php:803, classes/Shortcode/Popup.php:156
|
753 |
msgid "Location"
|
754 |
msgstr ""
|
755 |
|
756 |
+
#: classes/Admin/Popups.php:659, classes/Shortcode/Popup.php:157
|
757 |
msgid "Choose where the popup will be displayed."
|
758 |
msgstr ""
|
759 |
|
760 |
+
#: classes/Admin/Popups.php:677, classes/Admin/Popups.php:691, classes/Admin/Popups.php:705, classes/Admin/Popups.php:719, classes/Shortcode/Popup.php:165, classes/Shortcode/Popup.php:176, classes/Shortcode/Popup.php:187, classes/Shortcode/Popup.php:198
|
761 |
msgctxt "Screen Edge: top, bottom"
|
762 |
msgid "Distance from the %s edge of the screen."
|
763 |
msgstr ""
|
764 |
|
765 |
+
#: classes/Admin/Popups.php:732
|
766 |
msgid "Position from Trigger"
|
767 |
msgstr ""
|
768 |
|
769 |
+
#: classes/Admin/Popups.php:733
|
770 |
msgid "This will position the popup in relation to the %sClick Trigger%s."
|
771 |
msgstr ""
|
772 |
|
773 |
+
#: classes/Admin/Popups.php:739
|
774 |
msgid "Fixed Postioning"
|
775 |
msgstr ""
|
776 |
|
777 |
+
#: classes/Admin/Popups.php:740
|
778 |
msgid "Checking this sets the positioning of the popup to fixed."
|
779 |
msgstr ""
|
780 |
|
781 |
+
#: classes/Admin/Popups.php:747, classes/Shortcode/Popup.php:115
|
782 |
msgid "Disable Overlay"
|
783 |
msgstr ""
|
784 |
|
785 |
+
#: classes/Admin/Popups.php:748, classes/Shortcode/Popup.php:116
|
786 |
msgid "Checking this will disable and hide the overlay for this popup."
|
787 |
msgstr ""
|
788 |
|
789 |
+
#: classes/Admin/Popups.php:753
|
790 |
msgid "Stackable"
|
791 |
msgstr ""
|
792 |
|
793 |
+
#: classes/Admin/Popups.php:754
|
794 |
msgid "This enables other popups to remain open."
|
795 |
msgstr ""
|
796 |
|
797 |
+
#: classes/Admin/Popups.php:759
|
798 |
msgid "Disable Repositioning"
|
799 |
msgstr ""
|
800 |
|
801 |
+
#: classes/Admin/Popups.php:760
|
802 |
msgid "This will disable automatic repositioning of the popup on window resizing."
|
803 |
msgstr ""
|
804 |
|
805 |
+
#: classes/Admin/Popups.php:765
|
806 |
msgid "Popup Z-Index"
|
807 |
msgstr ""
|
808 |
|
809 |
+
#: classes/Admin/Popups.php:766
|
810 |
msgid "Change the z-index layer level for the popup."
|
811 |
msgstr ""
|
812 |
|
813 |
+
#: classes/Admin/Popups.php:778
|
814 |
msgid "Close Text"
|
815 |
msgstr ""
|
816 |
|
817 |
+
#: classes/Admin/Popups.php:780
|
818 |
msgid "Override the default close text. To use a Font Awesome icon instead of text, enter the CSS classes such as \"fas fa-camera\"."
|
819 |
msgstr ""
|
820 |
|
821 |
+
#: classes/Admin/Popups.php:785
|
822 |
msgid "Close Button Delay"
|
823 |
msgstr ""
|
824 |
|
825 |
+
#: classes/Admin/Popups.php:786
|
826 |
msgid "This delays the display of the close button."
|
827 |
msgstr ""
|
828 |
|
829 |
+
#: classes/Admin/Popups.php:798
|
830 |
msgid "Close on Form Submission"
|
831 |
msgstr ""
|
832 |
|
833 |
+
#: classes/Admin/Popups.php:799
|
834 |
msgid "Close the popup automatically after integrated form plugin submissions."
|
835 |
msgstr ""
|
836 |
|
837 |
+
#: classes/Admin/Popups.php:804, classes/Shortcode/Subscribe.php:394, classes/Triggers.php:193, classes/Triggers.php:198, classes/Triggers.php:230, includes/integrations/class-pum-cf7.php:147, includes/integrations/class-pum-gravity-forms.php:138, includes/integrations/ninja-forms/Actions/ClosePopup.php:43
|
838 |
msgid "Delay"
|
839 |
msgstr ""
|
840 |
|
841 |
+
#: classes/Admin/Popups.php:805
|
842 |
msgid "The delay before the popup will close after submission (in milliseconds)."
|
843 |
msgstr ""
|
844 |
|
845 |
+
#: classes/Admin/Popups.php:818, classes/Shortcode/Popup.php:243
|
846 |
msgid "Click Overlay to Close"
|
847 |
msgstr ""
|
848 |
|
849 |
+
#: classes/Admin/Popups.php:819, classes/Shortcode/Popup.php:244
|
850 |
msgid "Checking this will cause popup to close when user clicks on overlay."
|
851 |
msgstr ""
|
852 |
|
853 |
+
#: classes/Admin/Popups.php:824
|
854 |
msgid "Press ESC to Close"
|
855 |
msgstr ""
|
856 |
|
857 |
+
#: classes/Admin/Popups.php:825
|
858 |
msgid "Checking this will cause popup to close when user presses ESC key."
|
859 |
msgstr ""
|
860 |
|
861 |
+
#: classes/Admin/Popups.php:830
|
862 |
msgid "Press F4 to Close"
|
863 |
msgstr ""
|
864 |
|
865 |
+
#: classes/Admin/Popups.php:831
|
866 |
msgid "Checking this will cause popup to close when user presses F4 key."
|
867 |
msgstr ""
|
868 |
|
869 |
+
#: classes/Admin/Popups.php:840
|
870 |
msgid "Disable automatic re-triggering of popup after non-ajax form submission."
|
871 |
msgstr ""
|
872 |
|
873 |
+
#: classes/Admin/Popups.php:845
|
874 |
msgid "Disable accessibility features."
|
875 |
msgstr ""
|
876 |
|
877 |
+
#: classes/Admin/Popups.php:846
|
878 |
msgid "This includes trapping the tab key & focus inside popup while open, force focus the first element when popup open, and refocus last click trigger when closed."
|
879 |
msgstr ""
|
880 |
|
881 |
+
#: classes/Admin/Popups.php:1086, classes/Admin/Popups.php:1195
|
882 |
msgid "Opens"
|
883 |
msgstr ""
|
884 |
|
885 |
+
#: classes/Admin/Popups.php:1090, classes/Admin/Popups.php:1196
|
886 |
+
msgid "Conversions"
|
887 |
+
msgstr ""
|
888 |
+
|
889 |
+
#: classes/Admin/Popups.php:1094, classes/Admin/Popups.php:1197
|
890 |
+
msgid "Conversion Rate"
|
891 |
+
msgstr ""
|
892 |
+
|
893 |
+
#: classes/Admin/Popups.php:1100
|
894 |
msgid "Reset Counts"
|
895 |
msgstr ""
|
896 |
|
897 |
+
#: classes/Admin/Popups.php:1104
|
898 |
msgid "Last Reset"
|
899 |
msgstr ""
|
900 |
|
901 |
+
#: classes/Admin/Popups.php:1105
|
902 |
msgid "Previous Opens"
|
903 |
msgstr ""
|
904 |
|
905 |
+
#: classes/Admin/Popups.php:1109
|
906 |
+
msgid "Previous Conversions"
|
907 |
+
msgstr ""
|
908 |
+
|
909 |
+
#: classes/Admin/Popups.php:1112
|
910 |
msgid "Lifetime Opens"
|
911 |
msgstr ""
|
912 |
|
913 |
+
#: classes/Admin/Popups.php:1116
|
914 |
+
msgid "Lifetime Conversions"
|
915 |
+
msgstr ""
|
916 |
+
|
917 |
+
#: classes/Admin/Popups.php:1191, classes/Admin/Templates.php:649, classes/Privacy.php:223, classes/Shortcode/Subscribe.php:182, classes/Shortcode/Subscribe.php:236
|
918 |
msgid "Name"
|
919 |
msgstr ""
|
920 |
|
921 |
+
#: classes/Admin/Popups.php:1192, classes/Shortcode/Subscribe.php:309
|
922 |
msgid "Enabled"
|
923 |
msgstr ""
|
924 |
|
925 |
+
#: classes/Admin/Popups.php:1193, classes/Admin/Themes.php:333
|
926 |
msgid "Title"
|
927 |
msgstr ""
|
928 |
|
929 |
+
#: classes/Admin/Popups.php:1194, classes/Shortcode/PopupClose.php:89, classes/Shortcode/PopupTrigger.php:112, classes/Shortcode/PopupTrigger.php:113
|
930 |
+
msgid "CSS Class"
|
931 |
msgstr ""
|
932 |
|
933 |
+
#: classes/Admin/Popups.php:1388
|
934 |
msgid "Show all categories"
|
935 |
msgstr ""
|
936 |
|
937 |
+
#: classes/Admin/Popups.php:1401
|
938 |
msgid "Show all tags"
|
939 |
msgstr ""
|
940 |
|
982 |
msgid "Allow Popup Maker to track this plugin's usage and help us make this plugin better? No user data is sent to our servers. No sensitive data is tracked."
|
983 |
msgstr ""
|
984 |
|
|
|
|
|
|
|
|
|
985 |
#: classes/Admin/Settings.php:271
|
986 |
msgid "Default Newsletter Provider"
|
987 |
msgstr ""
|
1151 |
msgstr ""
|
1152 |
|
1153 |
#: classes/Admin/Settings.php:428
|
1154 |
+
msgid "Ad blocker: Naming method"
|
1155 |
msgstr ""
|
1156 |
|
1157 |
#: classes/Admin/Settings.php:429
|
1158 |
+
msgid "This will help generate unique names for our JavaScript files and the analytics routes."
|
1159 |
msgstr ""
|
1160 |
|
1161 |
#: classes/Admin/Settings.php:432
|
1162 |
+
msgid "Randomize Names"
|
1163 |
msgstr ""
|
1164 |
|
1165 |
#: classes/Admin/Settings.php:433
|
1166 |
+
msgid "Custom Names"
|
1167 |
msgstr ""
|
1168 |
|
1169 |
#: classes/Admin/Settings.php:443
|
1170 |
+
msgid "Ad blocker: Custom Name"
|
1171 |
msgstr ""
|
1172 |
|
1173 |
#: classes/Admin/Settings.php:444
|
1174 |
+
msgid "A custom & recognizable name to use for our assets."
|
1175 |
msgstr ""
|
1176 |
|
1177 |
#: classes/Admin/Settings.php:452
|
1227 |
msgstr ""
|
1228 |
|
1229 |
#: classes/Admin/Settings.php:495
|
1230 |
+
msgid "Disable Popup Maker occasionally showing random tips to improve your popups."
|
1231 |
+
msgstr ""
|
1232 |
+
|
1233 |
+
#: classes/Admin/Settings.php:499
|
1234 |
msgid "Delete all Popup Maker data on deactivation"
|
1235 |
msgstr ""
|
1236 |
|
1237 |
+
#: classes/Admin/Settings.php:500
|
1238 |
msgid "Check this to completely uninstall Popup Maker."
|
1239 |
msgstr ""
|
1240 |
|
1241 |
+
#: classes/Admin/Settings.php:507
|
1242 |
msgid "'Don't Load Google Fonts"
|
1243 |
msgstr ""
|
1244 |
|
1245 |
+
#: classes/Admin/Settings.php:508
|
1246 |
msgid "Check this disable loading of google fonts, useful if the fonts you chose are already loaded with your theme."
|
1247 |
msgstr ""
|
1248 |
|
1249 |
+
#: classes/Admin/Settings.php:512
|
1250 |
msgid "Don't load Popup Maker core stylesheet."
|
1251 |
msgstr ""
|
1252 |
|
1253 |
+
#: classes/Admin/Settings.php:513
|
1254 |
msgid "Check this if you have copied the Popup Maker core styles to your own stylesheet or are using custom styles."
|
1255 |
msgstr ""
|
1256 |
|
1257 |
+
#: classes/Admin/Settings.php:517
|
1258 |
msgid "Don't load popup theme styles to the head."
|
1259 |
msgstr ""
|
1260 |
|
1261 |
+
#: classes/Admin/Settings.php:518
|
1262 |
msgid "Check this if you have copied the popup theme styles to your own stylesheet or are using custom styles."
|
1263 |
msgstr ""
|
1264 |
|
1265 |
+
#: classes/Admin/Settings.php:551
|
1266 |
msgid "Show Popup Maker CSS"
|
1267 |
msgstr ""
|
1268 |
|
1269 |
+
#: classes/Admin/Settings.php:552
|
1270 |
msgid "Use this to quickly copy Popup Maker's CSS to your own stylesheet."
|
1271 |
msgstr ""
|
1272 |
|
1273 |
+
#: classes/Admin/Settings.php:555
|
1274 |
msgid "Core Styles"
|
1275 |
msgstr ""
|
1276 |
|
1277 |
+
#: classes/Admin/Settings.php:561
|
1278 |
msgid "Generated Popup & Popup Theme Styles"
|
1279 |
msgstr ""
|
1280 |
|
1281 |
+
#: classes/Admin/Settings.php:607
|
1282 |
msgid "Popup Maker Settings"
|
1283 |
msgstr ""
|
1284 |
|
1285 |
+
#: classes/Admin/Settings.php:671
|
1286 |
msgid "Subscriptions"
|
1287 |
msgstr ""
|
1288 |
|
1289 |
+
#: classes/Admin/Settings.php:672
|
1290 |
msgid "Extensions"
|
1291 |
msgstr ""
|
1292 |
|
1293 |
+
#: classes/Admin/Settings.php:673, classes/Admin/Settings.php:703
|
1294 |
msgid "Licenses"
|
1295 |
msgstr ""
|
1296 |
|
1297 |
+
#: classes/Admin/Settings.php:674, classes/Shortcode/Subscribe.php:62, classes/Shortcode/Subscribe.php:90
|
1298 |
msgid "Privacy"
|
1299 |
msgstr ""
|
1300 |
|
1301 |
+
#: classes/Admin/Settings.php:675, classes/Admin/Settings.php:710
|
1302 |
msgid "Misc"
|
1303 |
msgstr ""
|
1304 |
|
1305 |
+
#: classes/Admin/Settings.php:700
|
1306 |
msgid "Extension Settings"
|
1307 |
msgstr ""
|
1308 |
|
1309 |
+
#: classes/Admin/Settings.php:707
|
1310 |
msgid "Subscription Forms"
|
1311 |
msgstr ""
|
1312 |
|
1313 |
+
#: classes/Admin/Settings.php:711
|
1314 |
msgid "Assets"
|
1315 |
msgstr ""
|
1316 |
|
1831 |
msgid "Import From Easy Modal v2"
|
1832 |
msgstr ""
|
1833 |
|
1834 |
+
#: classes/Analytics.php:157
|
1835 |
msgid "Event Type"
|
1836 |
msgstr ""
|
1837 |
|
1838 |
+
#: classes/Analytics.php:162, classes/Shortcode/Subscribe.php:410, includes/integrations/ninja-forms/Actions/OpenPopup.php:42
|
1839 |
msgid "Popup ID"
|
1840 |
msgstr ""
|
1841 |
|
2071 |
msgid "%1$s"
|
2072 |
msgstr ""
|
2073 |
|
2074 |
+
#: classes/Extension/License.php:393, classes/Extension/License.php:429
|
2075 |
msgid "You have invalid or expired license keys for Popup Maker. Please go to the %sLicenses page%s to correct this issue."
|
2076 |
msgstr ""
|
2077 |
|
2078 |
+
#: classes/Extension/License.php:385
|
2079 |
+
msgid "One or more of your extensions are missing license keys. You will not be able to receive updates until the extension has a valid license key entered. Please go to the %sLicenses page%s to add your license keys."
|
2080 |
+
msgstr ""
|
2081 |
+
|
2082 |
+
#: classes/Extension/License.php:462
|
2083 |
msgid "Enter valid license key for automatic updates."
|
2084 |
msgstr ""
|
2085 |
|
2387 |
msgid "Enter the target value for your link. Can be left blank."
|
2388 |
msgstr ""
|
2389 |
|
|
|
|
|
|
|
|
|
2390 |
#: classes/Shortcode/PopupClose.php:92, classes/Shortcode/PopupTrigger.php:115
|
2391 |
msgid "Add additional classes for styling."
|
2392 |
msgstr ""
|
2744 |
msgid "Choose which cookies will disable this trigger?"
|
2745 |
msgstr ""
|
2746 |
|
2747 |
+
#: classes/Types.php:21, classes/Upsell.php:97, includes/modules/admin-bar.php:81
|
2748 |
msgid "Popups"
|
2749 |
msgstr ""
|
2750 |
|
2814 |
msgstr ""
|
2815 |
|
2816 |
#. translators: %s url to product page.
|
2817 |
+
#: classes/Upsell.php:27
|
2818 |
msgid "Want to disable the close button? Check out <a href=\"%s\" target=\"_blank\">Forced Interaction</a>!"
|
2819 |
msgstr ""
|
2820 |
|
2821 |
#. translators: %s url to product page.
|
2822 |
+
#: classes/Upsell.php:39
|
2823 |
msgid "Need more <a href=\"%s\" target=\"_blank\">advanced targeting</a> options?"
|
2824 |
msgstr ""
|
2825 |
|
2826 |
#. translators: %s url to product page.
|
2827 |
+
#: classes/Upsell.php:63
|
2828 |
msgid "Want to use <a href=\"%s\" target=\"_blank\">background images</a>?"
|
2829 |
msgstr ""
|
2830 |
|
2831 |
+
#: classes/Upsell.php:129
|
2832 |
msgid "Extensions and Integrations"
|
2833 |
msgstr ""
|
2834 |
|
2873 |
msgid "Check out the following notifications from Popup Maker."
|
2874 |
msgstr ""
|
2875 |
|
2876 |
+
#: classes/Utils/Alerts.php:387
|
2877 |
msgid "Dismiss this item."
|
2878 |
msgstr ""
|
2879 |
|
packages/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 |
+
};
|
packages/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
|
packages/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 |
+
}
|
packages/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 |
+
}
|
packages/action-scheduler/docs/_config.yml
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
title: Action Scheduler - Job Queue for WordPress
|
2 |
+
description: A scalable, traceable job queue for background processing large queues of tasks in WordPress. Designed for distribution in WordPress plugins - no server access required.
|
3 |
+
theme: jekyll-theme-hacker
|
4 |
+
permalink: /:slug/
|
5 |
+
plugins:
|
6 |
+
- jekyll-seo-tag
|
7 |
+
- jekyll-sitemap
|
packages/action-scheduler/docs/_layouts/default.html
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html lang="{{ site.lang | default: "en-US" }}">
|
3 |
+
<head>
|
4 |
+
<meta charset='utf-8'>
|
5 |
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
6 |
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
7 |
+
<link rel="stylesheet" href="{{ '/assets/css/style.css?v=' | append: site.github.build_revision | relative_url }}">
|
8 |
+
|
9 |
+
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
10 |
+
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
11 |
+
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
12 |
+
<link rel="manifest" href="/site.webmanifest">
|
13 |
+
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#63c0f5">
|
14 |
+
<meta name="msapplication-TileColor" content="#151515">
|
15 |
+
<meta name="theme-color" content="#ffffff">
|
16 |
+
|
17 |
+
|
18 |
+
{% seo %}
|
19 |
+
</head>
|
20 |
+
|
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>
|
34 |
+
</header>
|
35 |
+
|
36 |
+
<div class="container">
|
37 |
+
<section id="main_content">
|
38 |
+
{{ content }}
|
39 |
+
</section>
|
40 |
+
</div>
|
41 |
+
|
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 |
+
|
48 |
+
{% if site.google_analytics %}
|
49 |
+
<script>
|
50 |
+
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
51 |
+
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
52 |
+
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
53 |
+
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
54 |
+
ga('create', '{{ site.google_analytics }}', 'auto');
|
55 |
+
ga('send', 'pageview');
|
56 |
+
</script>
|
57 |
+
{% endif %}
|
58 |
+
</body>
|
59 |
+
</html>
|
packages/action-scheduler/docs/admin.md
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
description: Learn how to administer background jobs with the Action Scheduler job queue for WordPress.
|
3 |
+
---
|
4 |
+
# Scheduled Actions Administration Screen
|
5 |
+
|
6 |
+
Action Scheduler has a built in administration screen for monitoring, debugging and manually triggering scheduled actions.
|
7 |
+
|
8 |
+
The administration interface is accesible through both:
|
9 |
+
|
10 |
+
1. **Tools > Scheduled Actions**
|
11 |
+
1. **WooCommerce > Status > Scheduled Actions**, when WooCommerce is installed.
|
12 |
+
|
13 |
+
Among other tasks, from the admin screen you can:
|
14 |
+
|
15 |
+
* run a pending action
|
16 |
+
* view the scheduled actions with a specific status, like the all actions which have failed or are in-progress (https://cldup.com/NNTwE88Xl8.png).
|
17 |
+
* view the log entries for a specific action to find out why it failed.
|
18 |
+
* sort scheduled actions by hook name, scheduled date, claim ID or group name.
|
19 |
+
|
20 |
+
Still have questions? Check out the [FAQ](/faq).
|
21 |
+
|
22 |
+
![](https://cldup.com/5BA2BNB1sw.png)
|
packages/action-scheduler/docs/android-chrome-192x192.png
ADDED
Binary file
|
packages/action-scheduler/docs/android-chrome-256x256.png
ADDED
Binary file
|
packages/action-scheduler/docs/api.md
ADDED
@@ -0,0 +1,224 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
description: Reference guide for background processing functions provided by the Action Scheduler job queue for WordPress.
|
3 |
+
---
|
4 |
+
# API Reference
|
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 |
+
|
12 |
+
The Action Scheduler API functions are designed to mirror the WordPress [WP-Cron API functions](http://codex.wordpress.org/Category:WP-Cron_Functions).
|
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()`
|
75 |
+
|
76 |
+
### Description
|
77 |
+
|
78 |
+
Schedule an action to run repeatedly with a specified interval in seconds.
|
79 |
+
|
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()`
|
100 |
+
|
101 |
+
### Description
|
102 |
+
|
103 |
+
Schedule an action that recurs on a cron-like schedule.
|
104 |
+
|
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 |
+
|
171 |
+
### Description
|
172 |
+
|
173 |
+
Returns the next timestamp for a scheduled action.
|
174 |
+
|
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 |
+
|
189 |
+
(integer|boolean) The timestamp for the next occurrence, or false if nothing was found.
|
190 |
+
|
191 |
+
|
192 |
+
## Function Reference / `as_get_scheduled_actions()`
|
193 |
+
|
194 |
+
### Description
|
195 |
+
|
196 |
+
Find scheduled actions.
|
197 |
+
|
198 |
+
### Usage
|
199 |
+
|
200 |
+
```php
|
201 |
+
as_get_scheduled_actions( $args, $return_format );
|
202 |
+
```
|
203 |
+
|
204 |
+
### Parameters
|
205 |
+
|
206 |
+
- **$args** (array) Arguments to search and filter results by. Possible arguments, with their default values:
|
207 |
+
* `'hook' => ''` - the name of the action that will be triggered
|
208 |
+
* `'args' => NULL` - the args array that will be passed with the action
|
209 |
+
* `'date' => NULL` - the scheduled date of the action. Expects a DateTime object, a unix timestamp, or a string that can parsed with strtotime().
|
210 |
+
* `'date_compare' => '<=`' - operator for testing "date". accepted values are '!=', '>', '>=', '<', '<=', '='
|
211 |
+
* `'modified' => NULL` - the date the action was last updated. Expects a DateTime object, a unix timestamp, or a string that can parsed with strtotime().
|
212 |
+
* `'modified_compare' => '<='` - operator for testing "modified". accepted values are '!=', '>', '>=', '<', '<=', '='
|
213 |
+
* `'group' => ''` - the group the action belongs to
|
214 |
+
* `'status' => ''` - ActionScheduler_Store::STATUS_COMPLETE or ActionScheduler_Store::STATUS_PENDING
|
215 |
+
* `'claimed' => NULL` - TRUE to find claimed actions, FALSE to find unclaimed actions, a string to find a specific claim ID
|
216 |
+
* `'per_page' => 5` - Number of results to return
|
217 |
+
* `'offset' => 0`
|
218 |
+
* `'orderby' => 'date'` - accepted values are 'hook', 'group', 'modified', or 'date'
|
219 |
+
* `'order' => 'ASC'`
|
220 |
+
- **$return_format** (string) The format in which to return the scheduled actions: 'OBJECT', 'ARRAY_A', or 'ids'. Default: _'OBJECT'_.
|
221 |
+
|
222 |
+
### Return value
|
223 |
+
|
224 |
+
(array) Array of action rows matching the criteria specified with `$args`.
|
packages/action-scheduler/docs/apple-touch-icon.png
ADDED
Binary file
|
packages/action-scheduler/docs/assets/css/style.scss
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
---
|
3 |
+
|
4 |
+
@import "{{ site.theme }}";
|
5 |
+
|
6 |
+
a {
|
7 |
+
text-shadow: none;
|
8 |
+
text-decoration: none;
|
9 |
+
}
|
10 |
+
|
11 |
+
a:hover {
|
12 |
+
text-decoration: underline;
|
13 |
+
}
|
14 |
+
|
15 |
+
header h1 a {
|
16 |
+
color: #b5e853;
|
17 |
+
}
|
18 |
+
|
19 |
+
.container {
|
20 |
+
max-width: 700px;
|
21 |
+
}
|
22 |
+
|
23 |
+
footer {
|
24 |
+
margin-top: 6em;
|
25 |
+
padding: 1.6em 0;
|
26 |
+
border-top: 1px dashed #b5e853;
|
27 |
+
}
|
28 |
+
|
29 |
+
.footer-image {
|
30 |
+
text-align: center;
|
31 |
+
padding-top: 1em;
|
32 |
+
}
|
33 |
+
|
34 |
+
.github-corner:hover .octo-arm {
|
35 |
+
animation:octocat-wave 560ms ease-in-out
|
36 |
+
}
|
37 |
+
|
38 |
+
@keyframes octocat-wave {
|
39 |
+
0%,100%{
|
40 |
+
transform:rotate(0)
|
41 |
+
}
|
42 |
+
20%,60%{
|
43 |
+
transform:rotate(-25deg)
|
44 |
+
}
|
45 |
+
40%,80%{
|
46 |
+
transform:rotate(10deg)
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
@media (max-width:500px){
|
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 |
+
}
|
packages/action-scheduler/docs/browserconfig.xml
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="utf-8"?>
|
2 |
+
<browserconfig>
|
3 |
+
<msapplication>
|
4 |
+
<tile>
|
5 |
+
<square150x150logo src="/mstile-150x150.png"/>
|
6 |
+
<TileColor>#151515</TileColor>
|
7 |
+
</tile>
|
8 |
+
</msapplication>
|
9 |
+
</browserconfig>
|
packages/action-scheduler/docs/faq.md
ADDED
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## FAQ
|
2 |
+
|
3 |
+
### Is it safe to release Action Scheduler in my plugin? Won't its functions conflict with another copy of the library?
|
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 |
+
|
15 |
+
```php
|
16 |
+
ActionScheduler::runner()->run();
|
17 |
+
```
|
18 |
+
|
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 |
+
|
57 |
+
1. extend the abstract `ActionScheduler_Store` class, being careful to implement each of its methods
|
58 |
+
2. attach a callback to `'action_scheduler_store_class'` to tell Action Scheduler your class is the one which should be used to manage storage, e.g.
|
59 |
+
|
60 |
+
```
|
61 |
+
function eg_define_custom_store( $existing_storage_class ) {
|
62 |
+
return 'My_Radical_Action_Scheduler_Store';
|
63 |
+
}
|
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 |
+
|
73 |
+
Of course! Action Scheduler's logger is completely swappable, and always has been. You can also customise where logs are stored, and the storage mechanism.
|
74 |
+
|
75 |
+
To implement a custom logger:
|
76 |
+
|
77 |
+
1. extend the abstract `ActionScheduler_Logger` class, being careful to implement each of its methods
|
78 |
+
2. attach a callback to `'action_scheduler_logger_class'` to tell Action Scheduler your class is the one which should be used to manage logging, e.g.
|
79 |
+
|
80 |
+
```
|
81 |
+
function eg_define_custom_logger( $existing_storage_class ) {
|
82 |
+
return 'My_Radical_Action_Scheduler_Logger';
|
83 |
+
}
|
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 |
+
|
91 |
+
Wow, now you're really asking the tough questions. In theory, yes, this is possible. The `ActionScheduler_QueueRunner` class, which is responsible for running queues, is swappable via the `'action_scheduler_queue_runner_class'` filter.
|
92 |
+
|
93 |
+
Because of this, you can effectively customise queue running however you need. Whether that means tweaking minor things, like not using WP-Cron at all to initiate queues by overriding `ActionScheduler_QueueRunner::init()`, or completely changing how and where queues are run, by overriding `ActionScheduler_QueueRunner::run()`.
|
94 |
+
|
95 |
+
### Is Action Scheduler safe to use on my production site?
|
96 |
+
|
97 |
+
Yes, absolutely! Action Scheduler is actively used on tens of thousands of production sites already. Right now it's responsible for scheduling everything from emails to payments.
|
98 |
+
|
99 |
+
In fact, every month, Action Scheduler processes millions of payments as part of the [WooCommerce Subscriptions](https://woocommerce.com/products/woocommerce-subscriptions/) extension.
|
100 |
+
|
101 |
+
It requires no setup, and won't override any WordPress APIs (unless you want it to).
|
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.
|
packages/action-scheduler/docs/favicon-16x16.png
ADDED
Binary file
|
packages/action-scheduler/docs/favicon-32x32.png
ADDED
Binary file
|
packages/action-scheduler/docs/favicon.ico
ADDED
Binary file
|
packages/action-scheduler/docs/google14ef723abb376cd3.html
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
google-site-verification: google14ef723abb376cd3.html
|
packages/action-scheduler/docs/index.md
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
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 (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 |
+
|
14 |
+
Every month, Action Scheduler processes millions of payments for [Subscriptions](https://woocommerce.com/products/woocommerce-subscriptions/), webhooks for [WooCommerce](https://wordpress.org/plugins/woocommerce/), as well as emails and other events for a range of other plugins.
|
15 |
+
|
16 |
+
It's been seen on live sites processing queues in excess of 50,000 jobs and doing resource intensive operations, like processing payments and creating orders, in 10 concurrent queues at a rate of over 10,000 actions / hour without negatively impacting normal site operations.
|
17 |
+
|
18 |
+
This is all possible on infrastructure and WordPress sites outside the control of the plugin author.
|
19 |
+
|
20 |
+
Action Scheduler is specifically designed for distribution in WordPress plugins (and themes) - no server access required. If your plugin needs background processing, especially of large sets of tasks, Action Scheduler can help.
|
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 |
+
|
46 |
+
### Traceable Background Processing
|
47 |
+
|
48 |
+
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 `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.
|
packages/action-scheduler/docs/mstile-150x150.png
ADDED
Binary file
|
packages/action-scheduler/docs/perf.md
ADDED
@@ -0,0 +1,132 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
title: WordPress Background Processing at Scale - Action Scheduler Job Queue
|
3 |
+
description: Learn how to do WordPress background processing at scale by tuning the Action Scheduler job queue's default WP Cron runner.
|
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 ) {
|
29 |
+
return 120;
|
30 |
+
}
|
31 |
+
add_filter( 'action_scheduler_queue_runner_time_limit', 'eg_increase_time_limit' );
|
32 |
+
```
|
33 |
+
|
34 |
+
Some of the known host time limits are:
|
35 |
+
|
36 |
+
* 60 second on WP Engine
|
37 |
+
* 120 seconds on Pantheon
|
38 |
+
* 120 seconds on SiteGround
|
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 |
+
|
46 |
+
For example, to increase the batch size to 100, we can use the following function:
|
47 |
+
|
48 |
+
```php
|
49 |
+
function eg_increase_action_scheduler_batch_size( $batch_size ) {
|
50 |
+
return 100;
|
51 |
+
}
|
52 |
+
add_filter( 'action_scheduler_queue_runner_batch_size', 'eg_increase_action_scheduler_batch_size' );
|
53 |
+
```
|
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 |
+
|
65 |
+
```php
|
66 |
+
function eg_increase_action_scheduler_concurrent_batches( $concurrent_batches ) {
|
67 |
+
return 10;
|
68 |
+
}
|
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 |
+
/**
|
88 |
+
* Trigger 5 additional loopback requests with unique URL params.
|
89 |
+
*/
|
90 |
+
function eg_request_additional_runners() {
|
91 |
+
|
92 |
+
// allow self-signed SSL certificates
|
93 |
+
add_filter( 'https_local_ssl_verify', '__return_false', 100 );
|
94 |
+
|
95 |
+
for ( $i = 0; $i < 5; $i++ ) {
|
96 |
+
$response = wp_remote_post( admin_url( 'admin-ajax.php' ), array(
|
97 |
+
'method' => 'POST',
|
98 |
+
'timeout' => 45,
|
99 |
+
'redirection' => 5,
|
100 |
+
'httpversion' => '1.0',
|
101 |
+
'blocking' => false,
|
102 |
+
'headers' => array(),
|
103 |
+
'body' => array(
|
104 |
+
'action' => 'eg_create_additional_runners',
|
105 |
+
'instance' => $i,
|
106 |
+
'eg_nonce' => wp_create_nonce( 'eg_additional_runner_' . $i ),
|
107 |
+
),
|
108 |
+
'cookies' => array(),
|
109 |
+
) );
|
110 |
+
}
|
111 |
+
}
|
112 |
+
add_action( 'action_scheduler_run_queue', 'eg_request_additional_runners', 0 );
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Handle requests initiated by eg_request_additional_runners() and start a queue runner if the request is valid.
|
116 |
+
*/
|
117 |
+
function eg_create_additional_runners() {
|
118 |
+
|
119 |
+
if ( isset( $_POST['eg_nonce'] ) && isset( $_POST['instance'] ) && wp_verify_nonce( $_POST['eg_nonce'], 'eg_additional_runner_' . $_POST['instance'] ) ) {
|
120 |
+
ActionScheduler_QueueRunner::instance()->run();
|
121 |
+
}
|
122 |
+
|
123 |
+
wp_die();
|
124 |
+
}
|
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.
|
packages/action-scheduler/docs/safari-pinned-tab.svg
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" standalone="no"?>
|
2 |
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
3 |
+
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
4 |
+
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
5 |
+
width="312.000000pt" height="312.000000pt" viewBox="0 0 312.000000 312.000000"
|
6 |
+
preserveAspectRatio="xMidYMid meet">
|
7 |
+
<metadata>
|
8 |
+
Created by potrace 1.11, written by Peter Selinger 2001-2013
|
9 |
+
</metadata>
|
10 |
+
<g transform="translate(0.000000,312.000000) scale(0.100000,-0.100000)"
|
11 |
+
fill="#000000" stroke="none">
|
12 |
+
<path d="M1837 2924 c-1 -1 -54 -5 -117 -8 -63 -4 -128 -9 -145 -11 -16 -2
|
13 |
+
-46 -6 -65 -9 -19 -3 -57 -8 -85 -11 -27 -3 -70 -10 -95 -16 -25 -5 -58 -11
|
14 |
+
-75 -13 -98 -13 -360 -73 -565 -130 -236 -65 -584 -172 -609 -187 -105 -67 24
|
15 |
+
-294 221 -387 77 -37 152 -61 206 -65 16 -1 22 -8 22 -23 0 -34 35 -107 70
|
16 |
+
-147 62 -71 161 -119 265 -130 34 -4 40 -8 46 -33 25 -122 151 -205 301 -198
|
17 |
+
122 5 254 44 270 80 6 13 8 27 5 30 -3 4 -41 1 -84 -5 -119 -18 -155 -19 -217
|
18 |
+
-9 -74 11 -123 47 -132 94 -7 40 -4 46 28 49 94 12 238 52 260 72 35 32 23 46
|
19 |
+
-34 38 -29 -4 -62 -9 -73 -11 -45 -10 -255 -11 -320 -2 -81 11 -154 40 -185
|
20 |
+
73 -24 26 -52 97 -42 106 4 4 45 9 92 12 93 7 90 6 269 43 69 14 134 30 145
|
21 |
+
36 29 15 56 39 56 50 0 10 -74 3 -144 -12 -22 -5 -144 -8 -270 -6 -251 3 -327
|
22 |
+
15 -443 71 -47 23 -133 97 -133 115 0 6 150 49 225 64 11 3 83 20 160 39 77
|
23 |
+
19 154 38 170 41 17 4 39 8 50 10 11 3 56 12 100 21 98 21 104 22 146 29 19 3
|
24 |
+
43 7 54 10 28 5 94 16 130 20 17 3 44 7 60 10 17 2 50 7 75 11 41 5 87 11 150
|
25 |
+
20 111 16 452 23 509 11 14 -3 47 -8 75 -11 28 -3 78 -13 111 -21 365 -92 513
|
26 |
+
-289 509 -679 -1 -102 -35 -265 -56 -265 -5 0 -7 -4 -4 -9 3 -4 -12 -41 -33
|
27 |
+
-81 -144 -277 -468 -551 -794 -671 -107 -39 -317 -88 -317 -73 0 2 50 118 111
|
28 |
+
257 61 138 131 299 156 357 25 58 49 114 54 125 5 11 52 119 104 240 90 208
|
29 |
+
94 221 84 255 -19 58 -67 147 -99 183 -33 38 -86 65 -99 51 -5 -5 -23 -43 -41
|
30 |
+
-84 -50 -116 -179 -408 -211 -478 -16 -35 -29 -65 -29 -67 0 -2 -18 -43 -40
|
31 |
+
-90 -22 -47 -40 -88 -40 -90 0 -4 -92 -211 -156 -353 -13 -29 -24 -55 -24 -57
|
32 |
+
0 -2 -15 -37 -34 -77 -18 -40 -46 -102 -61 -138 -16 -36 -45 -102 -67 -148
|
33 |
+
-21 -46 -38 -85 -38 -87 0 -2 -34 -81 -76 -175 -55 -124 -74 -178 -70 -196 16
|
34 |
+
-62 116 -134 207 -148 36 -5 37 -5 63 53 14 32 51 112 82 177 31 66 74 160 96
|
35 |
+
209 22 50 43 93 47 98 7 7 19 10 82 21 19 3 44 8 55 10 12 2 38 7 57 10 480
|
36 |
+
76 883 299 1117 618 100 135 202 363 224 498 1 8 5 35 9 60 16 95 13 216 -7
|
37 |
+
340 -10 59 -60 190 -97 252 -45 76 -151 190 -219 235 -127 85 -324 159 -475
|
38 |
+
179 -27 3 -53 8 -56 9 -12 8 -344 25 -352 19z"/>
|
39 |
+
</g>
|
40 |
+
</svg>
|
packages/action-scheduler/docs/site.webmanifest
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "",
|
3 |
+
"short_name": "",
|
4 |
+
"icons": [
|
5 |
+
{
|
6 |
+
"src": "/android-chrome-192x192.png",
|
7 |
+
"sizes": "192x192",
|
8 |
+
"type": "image/png"
|
9 |
+
},
|
10 |
+
{
|
11 |
+
"src": "/android-chrome-256x256.png",
|
12 |
+
"sizes": "256x256",
|
13 |
+
"type": "image/png"
|
14 |
+
}
|
15 |
+
],
|
16 |
+
"theme_color": "#ffffff",
|
17 |
+
"background_color": "#ffffff",
|
18 |
+
"display": "standalone"
|
19 |
+
}
|
packages/action-scheduler/docs/usage.md
ADDED
@@ -0,0 +1,126 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
description: Learn how to use the Action Scheduler background processing job queue for WordPress in your WordPress plugin.
|
3 |
+
---
|
4 |
+
# Usage
|
5 |
+
|
6 |
+
Using Action Scheduler requires:
|
7 |
+
|
8 |
+
1. installing the library
|
9 |
+
1. scheduling an action
|
10 |
+
|
11 |
+
## Installation
|
12 |
+
|
13 |
+
There are two ways to install Action Scheduler:
|
14 |
+
|
15 |
+
1. regular WordPress plugin; or
|
16 |
+
1. a library within your plugin's codebase.
|
17 |
+
|
18 |
+
### Usage as a Plugin
|
19 |
+
|
20 |
+
Action Scheduler includes the necessary file headers to be used as a standard WordPress plugin.
|
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**
|
28 |
+
1. Click **Activate**
|
29 |
+
|
30 |
+
Or clone the Git repository into your site's `wp-content/plugins` folder.
|
31 |
+
|
32 |
+
Using Action Scheduler as a plugin can be handy for developing against newer versions, rather than having to update the subtree in your codebase. **When installed as a plugin, Action Scheduler does not provide any user interfaces for scheduling actions**. The only way to interact with Action Scheduler is via code.
|
33 |
+
|
34 |
+
### Usage as a Library
|
35 |
+
|
36 |
+
To use Action Scheduler as a library:
|
37 |
+
|
38 |
+
1. include the Action Scheduler codebase
|
39 |
+
1. load the library by including the `action-scheduler.php` file
|
40 |
+
|
41 |
+
Using a [subtree in your plugin, theme or site's Git repository](https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtree) to include Action Scheduler is the recommended method. Composer can also be used.
|
42 |
+
|
43 |
+
To include Action Scheduler as a git subtree:
|
44 |
+
|
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.
|
52 |
+
|
53 |
+
#### Step 2. Add the Repo as a Subtree
|
54 |
+
|
55 |
+
```
|
56 |
+
git subtree add --prefix libraries/action-scheduler subtree-action-scheduler master --squash
|
57 |
+
```
|
58 |
+
|
59 |
+
This will add the `master` branch of Action Scheduler to your repository in the folder `libraries/action-scheduler`.
|
60 |
+
|
61 |
+
You can change the `--prefix` to change where the code is included. Or change the `master` branch to a tag, like `2.1.0` to include only a stable version.
|
62 |
+
|
63 |
+
#### Step 3. Update the Subtree
|
64 |
+
|
65 |
+
To update Action Scheduler to a new version, use the commands:
|
66 |
+
|
67 |
+
```
|
68 |
+
git fetch subtree-action-scheduler master
|
69 |
+
git subtree pull --prefix libraries/action-scheduler subtree-action-scheduler master --squash
|
70 |
+
```
|
71 |
+
|
72 |
+
### Loading Action Scheduler
|
73 |
+
|
74 |
+
Regardless of how it is installed, to load Action Scheduler, you only need to include the `action-scheduler.php` file, e.g.
|
75 |
+
|
76 |
+
```php
|
77 |
+
<?php
|
78 |
+
require_once( plugin_dir_path( __FILE__ ) . '/libraries/action-scheduler/action-scheduler.php' );
|
79 |
+
```
|
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 |
+
|
87 |
+
Action Scheduler will register its version on `'plugins_loaded'` with priority `0` - after all other plugin codebases has been loaded. Therefore **the `action-scheduler.php` file must be included before `'plugins_loaded'` priority `0`**.
|
88 |
+
|
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/).
|
packages/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).
|
packages/action-scheduler/docs/wp-cli.md
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
description: Learn how to do WordPress background processing at scale with WP CLI and the Action Scheduler job queue.
|
3 |
+
---
|
4 |
+
# WP CLI
|
5 |
+
|
6 |
+
Action Scheduler has custom [WP CLI](http://wp-cli.org) commands available for processing actions.
|
7 |
+
|
8 |
+
For large sites, WP CLI is a much better choice for running queues of actions than the default WP Cron runner. These are some common cases where WP CLI is a better option:
|
9 |
+
|
10 |
+
* long-running tasks - Tasks that take a significant amount of time to run
|
11 |
+
* large queues - A large number of tasks will naturally take a longer time
|
12 |
+
* other plugins with extensive WP Cron usage - WP Cron's limited resources are spread across more tasks
|
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:
|
29 |
+
* `--batch-size` - This is the number of actions to run in a single batch. The default is `100`.
|
30 |
+
* `--batches` - This is the number of batches to run. Using 0 means that batches will continue running until there are no more actions to run.
|
31 |
+
* `--hooks` - Process only actions with specific hook or hooks, like `'woocommerce_scheduled_subscription_payment'`. By default, actions with any hook will be processed. Define multiple hooks as a comma separated string (without spaces), e.g. `--hooks=woocommerce_scheduled_subscription_trial_end,woocommerce_scheduled_subscription_payment,woocommerce_scheduled_subscription_expiration`
|
32 |
+
* `--group` - Process only actions in a specific group, like `'woocommerce-memberships'`. By default, actions in any group (or no group) will be processed.
|
33 |
+
* `--force` - By default, Action Scheduler limits the number of concurrent batches that can be run at once to ensure the server does not get overwhelmed. Using the `--force` flag overrides this behavior to force the WP CLI queue to run.
|
34 |
+
|
35 |
+
The best way to get a full list of commands and their available options is to use WP CLI itself. This can be done by running `wp action-scheduler` to list all Action Scheduler commands, or by including the `--help` flag with any of the individual commands. This will provide all relevant parameters and flags for the command.
|
36 |
+
|
37 |
+
## Cautionary Note on Action Dependencies when using `--group` or `--hooks` Options
|
38 |
+
|
39 |
+
The `--group` and `--hooks` options should be used with caution if you have an implicit dependency between scheduled actions based on their schedule.
|
40 |
+
|
41 |
+
For example, consider two scheduled actions for the same subscription:
|
42 |
+
|
43 |
+
* `scheduled_payment` scheduled for `2015-11-13 00:00:00` and
|
44 |
+
* `scheduled_expiration` scheduled for `2015-11-13 00:01:00`.
|
45 |
+
|
46 |
+
Under normal conditions, Action Scheduler will ensure the `scheduled_payment` action is run before the `scheduled_expiration` action. Becuase that's how they are scheduled.
|
47 |
+
|
48 |
+
However, when using the `--hooks` option, the `scheduled_payment` and `scheduled_expiration` actions will be processed in separate queues. As a result, this dependency is not guaranteed.
|
49 |
+
|
50 |
+
For example, consider a site with both:
|
51 |
+
|
52 |
+
* 100,000 `scheduled_payment` actions, scheduled for `2015-11-13 00:00:00`
|
53 |
+
* 100 `scheduled_expiration` actions, scheduled for `2015-11-13 00:01:00`
|
54 |
+
|
55 |
+
If two queue runners are running alongside each other with each runner dedicated to just one of these hooks, the queue runner handling expiration hooks will complete the processing of the expiration hooks more quickly than the queue runner handling all the payment actions.
|
56 |
+
|
57 |
+
**Because of this, the `--group` and `--hooks` options should be used with caution to avoid processing actions with an implicit dependency based on their schedule in separate queues.**
|
58 |
+
|
59 |
+
## Improving Performance with `--group` or `--hooks`
|
60 |
+
|
61 |
+
Being able to run queues for specific hooks or groups of actions is valuable at scale. Why? Because it means you can restrict the concurrency for similar actions.
|
62 |
+
|
63 |
+
For example, let's say you have 300,000 actions queued up comprised of:
|
64 |
+
|
65 |
+
* 100,000 renewals payments
|
66 |
+
* 100,000 email notifications
|
67 |
+
* 100,000 membership status updates
|
68 |
+
|
69 |
+
Action Scheduler's default WP Cron queue runner will process them all together. e.g. when it claims a batch of actions, some may be emails, some membership updates and some renewals.
|
70 |
+
|
71 |
+
When you add concurrency to that, you can end up with issues. For example, if you have 3 queues running, they may all be attempting to process similar actions at the same time, which can lead to querying the same database tables with similar queries. Depending on the code/queries running, this can lead to database locks or other issues.
|
72 |
+
|
73 |
+
If you can batch based on each action's group, then you can improve performance by processing like actions consecutively, but still processing the full set of actions concurrently.
|
74 |
+
|
75 |
+
For example, if one queue is created to process emails, another to process membership updates, and another to process renewal payments, then the same queries won't be run at the same time, and 3 separate queues will be able to run more efficiently.
|
76 |
+
|
77 |
+
The WP CLI runner can achieve this using the `--group` option.
|
packages/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 |
+
}
|
packages/action-scheduler/package.json
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "action-scheduler",
|
3 |
+
"title": "Action Scheduler",
|
4 |
+
"version": "3.1.6",
|
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 |
+
}
|
packages/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>
|
packages/action-scheduler/tests/ActionScheduler_UnitTestCase.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_UnitTestCase
|
5 |
+
*/
|
6 |
+
class ActionScheduler_UnitTestCase extends WP_UnitTestCase {
|
7 |
+
|
8 |
+
protected $existing_timezone;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Counts the number of test cases executed by run(TestResult result).
|
12 |
+
*
|
13 |
+
* @return int
|
14 |
+
*/
|
15 |
+
public function count() {
|
16 |
+
return 'UTC' == date_default_timezone_get() ? 2 : 3;
|
17 |
+
}
|
18 |
+
|
19 |
+
/**
|
20 |
+
* We want to run every test multiple times using a different timezone to make sure
|
21 |
+
* that they are unaffected by changes to PHP's timezone.
|
22 |
+
*/
|
23 |
+
public function run( PHPUnit\Framework\TestResult $result = NULL ){
|
24 |
+
|
25 |
+
if ($result === NULL) {
|
26 |
+
$result = $this->createResult();
|
27 |
+
}
|
28 |
+
|
29 |
+
if ( 'UTC' != ( $this->existing_timezone = date_default_timezone_get() ) ) {
|
30 |
+
date_default_timezone_set( 'UTC' );
|
31 |
+
$result->run( $this );
|
32 |
+
}
|
33 |
+
|
34 |
+
date_default_timezone_set( 'Pacific/Fiji' ); // UTC+12
|
35 |
+
$result->run( $this );
|
36 |
+
|
37 |
+
date_default_timezone_set( 'Pacific/Tahiti' ); // UTC-10: it's a magical place
|
38 |
+
$result->run( $this );
|
39 |
+
|
40 |
+
date_default_timezone_set( $this->existing_timezone );
|
41 |
+
|
42 |
+
return $result;
|
43 |
+
}
|
44 |
+
}
|
packages/action-scheduler/tests/bootstrap.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
$GLOBALS['wp_tests_options'][ 'template' ] = 'twentyseventeen';
|
4 |
+
$GLOBALS['wp_tests_options'][ 'stylesheet' ] = 'twentyseventeen';
|
5 |
+
$GLOBALS['wp_tests_options'][ 'active_plugins' ][] = basename( dirname( __DIR__ ) ) .'/action-scheduler.php';
|
6 |
+
|
7 |
+
// Check for select constants defined as environment variables
|
8 |
+
foreach ( array('WP_CONTENT_DIR', 'WP_CONTENT_URL', 'WP_PLUGIN_DIR', 'WP_PLUGIN_URL', 'WPMU_PLUGIN_DIR') as $env_constant ) {
|
9 |
+
if ( false !== getenv( $env_constant ) && !defined( $env_constant ) ) {
|
10 |
+
define( $env_constant, getenv( $env_constant ));
|
11 |
+
}
|
12 |
+
}
|
13 |
+
|
14 |
+
// If the wordpress-tests repo location has been customized (and specified
|
15 |
+
// with WP_TESTS_DIR), use that location. This will most commonly be the case
|
16 |
+
// when configured for use with Travis CI.
|
17 |
+
|
18 |
+
// Otherwise, we'll just assume that this plugin is installed in the WordPress
|
19 |
+
// SVN external checkout configured in the wordpress-tests repo.
|
20 |
+
|
21 |
+
if( false !== getenv( 'WP_TESTS_DIR' ) ) {
|
22 |
+
require getenv( 'WP_TESTS_DIR' ) . '/includes/bootstrap.php';
|
23 |
+
} else {
|
24 |
+
require dirname( dirname( dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) ) ) . '/tests/phpunit/includes/bootstrap.php';
|
25 |
+
}
|
26 |
+
|
27 |
+
if ( class_exists( 'PHPUnit\Framework\TestResult' ) ) { // PHPUnit 6.0 or newer
|
28 |
+
include_once('ActionScheduler_UnitTestCase.php');
|
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');
|
packages/action-scheduler/tests/phpunit.xml.dist
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
|
3 |
+
<phpunit backupGlobals="false"
|
4 |
+
backupStaticAttributes="false"
|
5 |
+
colors="true"
|
6 |
+
convertErrorsToExceptions="true"
|
7 |
+
convertNoticesToExceptions="true"
|
8 |
+
convertWarningsToExceptions="true"
|
9 |
+
processIsolation="false"
|
10 |
+
stopOnFailure="false"
|
11 |
+
syntaxCheck="false"
|
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>
|
36 |
+
<exclude>
|
37 |
+
<group>ignore</group>
|
38 |
+
</exclude>
|
39 |
+
</groups>
|
40 |
+
<filter>
|
41 |
+
<whitelist processsUncoveredFilesFromWhitelist="true">
|
42 |
+
<directory suffix=".php">..</directory>
|
43 |
+
<exclude>
|
44 |
+
<directory>.</directory>
|
45 |
+
</exclude>
|
46 |
+
</whitelist>
|
47 |
+
</filter>
|
48 |
+
</phpunit>
|
packages/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 |
+
}
|
packages/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 |
+
}
|
packages/action-scheduler/tests/phpunit/deprecated/ActionScheduler_UnitTestCase.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_UnitTestCase
|
5 |
+
*/
|
6 |
+
class ActionScheduler_UnitTestCase extends WP_UnitTestCase {
|
7 |
+
|
8 |
+
protected $existing_timezone;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Counts the number of test cases executed by run(TestResult result).
|
12 |
+
*
|
13 |
+
* @return int
|
14 |
+
*/
|
15 |
+
public function count() {
|
16 |
+
return 'UTC' == date_default_timezone_get() ? 2 : 3;
|
17 |
+
}
|
18 |
+
|
19 |
+
/**
|
20 |
+
* We want to run every test multiple times using a different timezone to make sure
|
21 |
+
* that they are unaffected by changes to PHP's timezone.
|
22 |
+
*/
|
23 |
+
public function run( PHPUnit_Framework_TestResult $result = NULL ){
|
24 |
+
|
25 |
+
if ($result === NULL) {
|
26 |
+
$result = $this->createResult();
|
27 |
+
}
|
28 |
+
|
29 |
+
if ( 'UTC' != ( $this->existing_timezone = date_default_timezone_get() ) ) {
|
30 |
+
date_default_timezone_set( 'UTC' );
|
31 |
+
$result->run( $this );
|
32 |
+
}
|
33 |
+
|
34 |
+
date_default_timezone_set( 'Pacific/Fiji' ); // UTC+12
|
35 |
+
$result->run( $this );
|
36 |
+
|
37 |
+
date_default_timezone_set( 'Pacific/Tahiti' ); // UTC-10: it's a magical place
|
38 |
+
$result->run( $this );
|
39 |
+
|
40 |
+
date_default_timezone_set( $this->existing_timezone );
|
41 |
+
|
42 |
+
return $result;
|
43 |
+
}
|
44 |
+
}
|
packages/action-scheduler/tests/phpunit/helpers/ActionScheduler_TimezoneHelper_Test.php
ADDED
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* @group timezone
|
5 |
+
*/
|
6 |
+
class ActionScheduler_TimezoneHelper_Test extends ActionScheduler_UnitTestCase {
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Ensure that the timezone string we expect works properly.
|
10 |
+
*
|
11 |
+
* @dataProvider local_timezone_provider
|
12 |
+
*
|
13 |
+
* @param $timezone_string
|
14 |
+
*/
|
15 |
+
public function test_local_timezone_strings( $timezone_string ) {
|
16 |
+
$timezone_filter = function ( $tz ) use ( $timezone_string ) {
|
17 |
+
return $timezone_string;
|
18 |
+
};
|
19 |
+
|
20 |
+
add_filter( 'option_timezone_string', $timezone_filter );
|
21 |
+
|
22 |
+
$date = new ActionScheduler_DateTime();
|
23 |
+
$timezone = ActionScheduler_TimezoneHelper::set_local_timezone( $date )->getTimezone();
|
24 |
+
$this->assertInstanceOf( 'DateTimeZone', $timezone );
|
25 |
+
$this->assertEquals( $timezone_string, $timezone->getName() );
|
26 |
+
|
27 |
+
remove_filter( 'option_timezone_string', $timezone_filter );
|
28 |
+
}
|
29 |
+
|
30 |
+
public function local_timezone_provider() {
|
31 |
+
return array(
|
32 |
+
array( 'America/New_York' ),
|
33 |
+
array( 'Australia/Melbourne' ),
|
34 |
+
array( 'UTC' ),
|
35 |
+
);
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Ensure that most GMT offsets don't return UTC as the timezone.
|
40 |
+
*
|
41 |
+
* @dataProvider local_timezone_offsets_provider
|
42 |
+
*
|
43 |
+
* @param $gmt_offset
|
44 |
+
*/
|
45 |
+
public function test_local_timezone_offsets( $gmt_offset ) {
|
46 |
+
$gmt_filter = function ( $gmt ) use ( $gmt_offset ) {
|
47 |
+
return $gmt_offset;
|
48 |
+
};
|
49 |
+
|
50 |
+
$date = new ActionScheduler_DateTime();
|
51 |
+
|
52 |
+
add_filter( 'option_gmt_offset', $gmt_filter );
|
53 |
+
ActionScheduler_TimezoneHelper::set_local_timezone( $date );
|
54 |
+
remove_filter( 'option_gmt_offset', $gmt_filter );
|
55 |
+
|
56 |
+
$offset_in_seconds = $gmt_offset * HOUR_IN_SECONDS;
|
57 |
+
|
58 |
+
$this->assertEquals( $offset_in_seconds, $date->getOffset() );
|
59 |
+
$this->assertEquals( $offset_in_seconds, $date->getOffsetTimestamp() - $date->getTimestamp() );
|
60 |
+
}
|
61 |
+
|
62 |
+
public function local_timezone_offsets_provider() {
|
63 |
+
return array(
|
64 |
+
array( '-11' ),
|
65 |
+
array( '-10.5' ),
|
66 |
+
array( '-10' ),
|
67 |
+
array( '-9' ),
|
68 |
+
array( '-8' ),
|
69 |
+
array( '-7' ),
|
70 |
+
array( '-6' ),
|
71 |
+
array( '-5' ),
|
72 |
+
array( '-4.5' ),
|
73 |
+
array( '-4' ),
|
74 |
+
array( '-3.5' ),
|
75 |
+
array( '-3' ),
|
76 |
+
array( '-2' ),
|
77 |
+
array( '-1' ),
|
78 |
+
array( '1' ),
|
79 |
+
array( '1.5' ),
|
80 |
+
array( '2' ),
|
81 |
+
array( '3' ),
|
82 |
+
array( '4' ),
|
83 |
+
array( '5' ),
|
84 |
+
array( '5.5' ),
|
85 |
+
array( '5.75' ),
|
86 |
+
array( '6' ),
|
87 |
+
array( '7' ),
|
88 |
+
array( '8' ),
|
89 |
+
array( '8.5' ),
|
90 |
+
array( '9' ),
|
91 |
+
array( '9.5' ),
|
92 |
+
array( '10' ),
|
93 |
+
array( '10.5' ),
|
94 |
+
array( '11' ),
|
95 |
+
array( '11.5' ),
|
96 |
+
array( '12' ),
|
97 |
+
array( '13' ),
|
98 |
+
);
|
99 |
+
}
|
100 |
+
}
|
packages/action-scheduler/tests/phpunit/jobs/ActionScheduler_Action_Test.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_Action_Test
|
5 |
+
* @group actions
|
6 |
+
*/
|
7 |
+
class ActionScheduler_Action_Test extends ActionScheduler_UnitTestCase {
|
8 |
+
public function test_set_schedule() {
|
9 |
+
$time = as_get_datetime_object();
|
10 |
+
$schedule = new ActionScheduler_SimpleSchedule($time);
|
11 |
+
$action = new ActionScheduler_Action('my_hook', array(), $schedule);
|
12 |
+
$this->assertEquals( $schedule, $action->get_schedule() );
|
13 |
+
}
|
14 |
+
|
15 |
+
public function test_null_schedule() {
|
16 |
+
$action = new ActionScheduler_Action('my_hook');
|
17 |
+
$this->assertInstanceOf( 'ActionScheduler_NullSchedule', $action->get_schedule() );
|
18 |
+
}
|
19 |
+
|
20 |
+
public function test_set_hook() {
|
21 |
+
$action = new ActionScheduler_Action('my_hook');
|
22 |
+
$this->assertEquals( 'my_hook', $action->get_hook() );
|
23 |
+
}
|
24 |
+
|
25 |
+
public function test_args() {
|
26 |
+
$action = new ActionScheduler_Action('my_hook');
|
27 |
+
$this->assertEmpty($action->get_args());
|
28 |
+
|
29 |
+
$action = new ActionScheduler_Action('my_hook', array(5,10,15));
|
30 |
+
$this->assertEqualSets(array(5,10,15), $action->get_args());
|
31 |
+
}
|
32 |
+
|
33 |
+
public function test_set_group() {
|
34 |
+
$action = new ActionScheduler_Action('my_hook', array(), NULL, 'my_group');
|
35 |
+
$this->assertEquals('my_group', $action->get_group());
|
36 |
+
}
|
37 |
+
|
38 |
+
public function test_execute() {
|
39 |
+
$mock = new MockAction();
|
40 |
+
|
41 |
+
$random = md5(rand());
|
42 |
+
add_action( $random, array( $mock, 'action' ) );
|
43 |
+
|
44 |
+
$action = new ActionScheduler_Action( $random, array($random) );
|
45 |
+
$action->execute();
|
46 |
+
|
47 |
+
remove_action( $random, array( $mock, 'action' ) );
|
48 |
+
|
49 |
+
$this->assertEquals( 1, $mock->get_call_count() );
|
50 |
+
$events = $mock->get_events();
|
51 |
+
$event = reset($events);
|
52 |
+
$this->assertEquals( $random, reset($event['args']) );
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
packages/action-scheduler/tests/phpunit/jobs/ActionScheduler_NullAction_Test.php
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_NullAction_Test
|
5 |
+
* @group actions
|
6 |
+
*/
|
7 |
+
class ActionScheduler_NullAction_Test extends ActionScheduler_UnitTestCase {
|
8 |
+
public function test_null_action() {
|
9 |
+
$action = new ActionScheduler_NullAction();
|
10 |
+
|
11 |
+
$this->assertEmpty($action->get_hook());
|
12 |
+
$this->assertEmpty($action->get_args());
|
13 |
+
$this->assertNull( $action->get_schedule()->get_date() );
|
14 |
+
}
|
15 |
+
}
|
16 |
+
|
packages/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 |
+
}
|
packages/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 |
+
}
|
packages/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 |
+
}
|
packages/action-scheduler/tests/phpunit/jobstore/ActionScheduler_wpPostStore_Test.php
ADDED
@@ -0,0 +1,414 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_wpPostStore_Test
|
5 |
+
* @group stores
|
6 |
+
*/
|
7 |
+
class ActionScheduler_wpPostStore_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', array(), $schedule);
|
13 |
+
$store = new ActionScheduler_wpPostStore();
|
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', array(), new ActionScheduler_SimpleSchedule( $time ) );
|
22 |
+
$store = new ActionScheduler_wpPostStore();
|
23 |
+
|
24 |
+
$action_id = $store->save_action( $action, $time );
|
25 |
+
$action_date = $store->get_date( $action_id );
|
26 |
+
|
27 |
+
$this->assertEquals( $time->getTimestamp(), $action_date->getTimestamp() );
|
28 |
+
}
|
29 |
+
|
30 |
+
public function test_retrieve_action() {
|
31 |
+
$time = as_get_datetime_object();
|
32 |
+
$schedule = new ActionScheduler_SimpleSchedule($time);
|
33 |
+
$action = new ActionScheduler_Action('my_hook', array(), $schedule, 'my_group');
|
34 |
+
$store = new ActionScheduler_wpPostStore();
|
35 |
+
$action_id = $store->save_action($action);
|
36 |
+
|
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 |
+
|
44 |
+
/**
|
45 |
+
* @dataProvider provide_bad_args
|
46 |
+
*
|
47 |
+
* @param string $content
|
48 |
+
*/
|
49 |
+
public function test_action_bad_args( $content ) {
|
50 |
+
$store = new ActionScheduler_wpPostStore();
|
51 |
+
$post_id = wp_insert_post( array(
|
52 |
+
'post_type' => ActionScheduler_wpPostStore::POST_TYPE,
|
53 |
+
'post_status' => ActionScheduler_Store::STATUS_PENDING,
|
54 |
+
'post_content' => $content,
|
55 |
+
) );
|
56 |
+
|
57 |
+
$fetched = $store->fetch_action( $post_id );
|
58 |
+
$this->assertInstanceOf( 'ActionScheduler_NullSchedule', $fetched->get_schedule() );
|
59 |
+
}
|
60 |
+
|
61 |
+
public function provide_bad_args() {
|
62 |
+
return array(
|
63 |
+
array( '{"bad_json":true}}' ),
|
64 |
+
);
|
65 |
+
}
|
66 |
+
|
67 |
+
public function test_cancel_action() {
|
68 |
+
$time = as_get_datetime_object();
|
69 |
+
$schedule = new ActionScheduler_SimpleSchedule($time);
|
70 |
+
$action = new ActionScheduler_Action('my_hook', array(), $schedule, 'my_group');
|
71 |
+
$store = new ActionScheduler_wpPostStore();
|
72 |
+
$action_id = $store->save_action($action);
|
73 |
+
$store->cancel_action( $action_id );
|
74 |
+
|
75 |
+
$fetched = $store->fetch_action( $action_id );
|
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();
|
121 |
+
for ( $i = 3 ; $i > -3 ; $i-- ) {
|
122 |
+
$time = as_get_datetime_object($i.' hours');
|
123 |
+
$schedule = new ActionScheduler_SimpleSchedule($time);
|
124 |
+
$action = new ActionScheduler_Action('my_hook', array($i), $schedule, 'my_group');
|
125 |
+
$created_actions[] = $store->save_action($action);
|
126 |
+
}
|
127 |
+
|
128 |
+
$claim = $store->stake_claim();
|
129 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
130 |
+
|
131 |
+
$this->assertCount( 3, $claim->get_actions() );
|
132 |
+
$this->assertEqualSets( array_slice( $created_actions, 3, 3 ), $claim->get_actions() );
|
133 |
+
}
|
134 |
+
|
135 |
+
public function test_claim_actions_order() {
|
136 |
+
$store = new ActionScheduler_wpPostStore();
|
137 |
+
$schedule = new ActionScheduler_SimpleSchedule( as_get_datetime_object( '-1 hour' ) );
|
138 |
+
$created_actions = array(
|
139 |
+
$store->save_action( new ActionScheduler_Action( 'my_hook', array( 1 ), $schedule, 'my_group' ) ),
|
140 |
+
$store->save_action( new ActionScheduler_Action( 'my_hook', array( 1 ), $schedule, 'my_group' ) ),
|
141 |
+
);
|
142 |
+
|
143 |
+
$claim = $store->stake_claim();
|
144 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
145 |
+
|
146 |
+
// Verify uniqueness of action IDs.
|
147 |
+
$this->assertEquals( 2, count( array_unique( $created_actions ) ) );
|
148 |
+
|
149 |
+
// Verify the count and order of the actions.
|
150 |
+
$claimed_actions = $claim->get_actions();
|
151 |
+
$this->assertCount( 2, $claimed_actions );
|
152 |
+
$this->assertEquals( $created_actions, $claimed_actions );
|
153 |
+
|
154 |
+
// Verify the reversed order doesn't pass.
|
155 |
+
$reversed_actions = array_reverse( $created_actions );
|
156 |
+
$this->assertNotEquals( $reversed_actions, $claimed_actions );
|
157 |
+
}
|
158 |
+
|
159 |
+
public function test_duplicate_claim() {
|
160 |
+
$created_actions = array();
|
161 |
+
$store = new ActionScheduler_wpPostStore();
|
162 |
+
for ( $i = 0 ; $i > -3 ; $i-- ) {
|
163 |
+
$time = as_get_datetime_object($i.' hours');
|
164 |
+
$schedule = new ActionScheduler_SimpleSchedule($time);
|
165 |
+
$action = new ActionScheduler_Action('my_hook', array($i), $schedule, 'my_group');
|
166 |
+
$created_actions[] = $store->save_action($action);
|
167 |
+
}
|
168 |
+
|
169 |
+
$claim1 = $store->stake_claim();
|
170 |
+
$claim2 = $store->stake_claim();
|
171 |
+
$this->assertCount( 3, $claim1->get_actions() );
|
172 |
+
$this->assertCount( 0, $claim2->get_actions() );
|
173 |
+
}
|
174 |
+
|
175 |
+
public function test_release_claim() {
|
176 |
+
$created_actions = array();
|
177 |
+
$store = new ActionScheduler_wpPostStore();
|
178 |
+
for ( $i = 0 ; $i > -3 ; $i-- ) {
|
179 |
+
$time = as_get_datetime_object($i.' hours');
|
180 |
+
$schedule = new ActionScheduler_SimpleSchedule($time);
|
181 |
+
$action = new ActionScheduler_Action('my_hook', array($i), $schedule, 'my_group');
|
182 |
+
$created_actions[] = $store->save_action($action);
|
183 |
+
}
|
184 |
+
|
185 |
+
$claim1 = $store->stake_claim();
|
186 |
+
|
187 |
+
$store->release_claim( $claim1 );
|
188 |
+
|
189 |
+
$claim2 = $store->stake_claim();
|
190 |
+
$this->assertCount( 3, $claim2->get_actions() );
|
191 |
+
}
|
192 |
+
|
193 |
+
public function test_search() {
|
194 |
+
$created_actions = array();
|
195 |
+
$store = new ActionScheduler_wpPostStore();
|
196 |
+
for ( $i = -3 ; $i <= 3 ; $i++ ) {
|
197 |
+
$time = as_get_datetime_object($i.' hours');
|
198 |
+
$schedule = new ActionScheduler_SimpleSchedule($time);
|
199 |
+
$action = new ActionScheduler_Action('my_hook', array($i), $schedule, 'my_group');
|
200 |
+
$created_actions[] = $store->save_action($action);
|
201 |
+
}
|
202 |
+
|
203 |
+
$next_no_args = $store->find_action( 'my_hook' );
|
204 |
+
$this->assertEquals( $created_actions[0], $next_no_args );
|
205 |
+
|
206 |
+
$next_with_args = $store->find_action( 'my_hook', array( 'args' => array( 1 ) ) );
|
207 |
+
$this->assertEquals( $created_actions[4], $next_with_args );
|
208 |
+
|
209 |
+
$non_existent = $store->find_action( 'my_hook', array( 'args' => array( 17 ) ) );
|
210 |
+
$this->assertNull( $non_existent );
|
211 |
+
}
|
212 |
+
|
213 |
+
public function test_search_by_group() {
|
214 |
+
$store = new ActionScheduler_wpPostStore();
|
215 |
+
$schedule = new ActionScheduler_SimpleSchedule(as_get_datetime_object('tomorrow'));
|
216 |
+
$abc = $store->save_action(new ActionScheduler_Action('my_hook', array(1), $schedule, 'abc'));
|
217 |
+
$def = $store->save_action(new ActionScheduler_Action('my_hook', array(1), $schedule, 'def'));
|
218 |
+
$ghi = $store->save_action(new ActionScheduler_Action('my_hook', array(1), $schedule, 'ghi'));
|
219 |
+
|
220 |
+
$this->assertEquals( $abc, $store->find_action('my_hook', array('group' => 'abc')));
|
221 |
+
$this->assertEquals( $def, $store->find_action('my_hook', array('group' => 'def')));
|
222 |
+
$this->assertEquals( $ghi, $store->find_action('my_hook', array('group' => 'ghi')));
|
223 |
+
}
|
224 |
+
|
225 |
+
public function test_post_author() {
|
226 |
+
$current_user = get_current_user_id();
|
227 |
+
|
228 |
+
$time = as_get_datetime_object();
|
229 |
+
$schedule = new ActionScheduler_SimpleSchedule($time);
|
230 |
+
$action = new ActionScheduler_Action('my_hook', array(), $schedule);
|
231 |
+
$store = new ActionScheduler_wpPostStore();
|
232 |
+
$action_id = $store->save_action($action);
|
233 |
+
|
234 |
+
$post = get_post($action_id);
|
235 |
+
$this->assertEquals(0, $post->post_author);
|
236 |
+
|
237 |
+
$new_user = $this->factory->user->create_object(array(
|
238 |
+
'user_login' => __FUNCTION__,
|
239 |
+
'user_pass' => md5(rand()),
|
240 |
+
));
|
241 |
+
wp_set_current_user( $new_user );
|
242 |
+
|
243 |
+
|
244 |
+
$schedule = new ActionScheduler_SimpleSchedule($time);
|
245 |
+
$action = new ActionScheduler_Action('my_hook', array(), $schedule);
|
246 |
+
$action_id = $store->save_action($action);
|
247 |
+
$post = get_post($action_id);
|
248 |
+
$this->assertEquals(0, $post->post_author);
|
249 |
+
|
250 |
+
wp_set_current_user($current_user);
|
251 |
+
}
|
252 |
+
|
253 |
+
/**
|
254 |
+
* @issue 13
|
255 |
+
*/
|
256 |
+
public function test_post_status_for_recurring_action() {
|
257 |
+
$time = as_get_datetime_object('10 minutes');
|
258 |
+
$schedule = new ActionScheduler_IntervalSchedule($time, HOUR_IN_SECONDS);
|
259 |
+
$action = new ActionScheduler_Action('my_hook', array(), $schedule);
|
260 |
+
$store = new ActionScheduler_wpPostStore();
|
261 |
+
$action_id = $store->save_action($action);
|
262 |
+
|
263 |
+
$action = $store->fetch_action($action_id);
|
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));
|
271 |
+
$this->assertEquals('pending', get_post_status($new_action_id));
|
272 |
+
}
|
273 |
+
|
274 |
+
public function test_get_run_date() {
|
275 |
+
$time = as_get_datetime_object('-10 minutes');
|
276 |
+
$schedule = new ActionScheduler_IntervalSchedule($time, HOUR_IN_SECONDS);
|
277 |
+
$action = new ActionScheduler_Action('my_hook', array(), $schedule);
|
278 |
+
$store = new ActionScheduler_wpPostStore();
|
279 |
+
$action_id = $store->save_action($action);
|
280 |
+
|
281 |
+
$this->assertEquals( $store->get_date($action_id)->getTimestamp(), $time->getTimestamp() );
|
282 |
+
|
283 |
+
$action = $store->fetch_action($action_id);
|
284 |
+
$action->execute();
|
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() );
|
294 |
+
}
|
295 |
+
|
296 |
+
public function test_get_status() {
|
297 |
+
$time = as_get_datetime_object('-10 minutes');
|
298 |
+
$schedule = new ActionScheduler_IntervalSchedule($time, HOUR_IN_SECONDS);
|
299 |
+
$action = new ActionScheduler_Action('my_hook', array(), $schedule);
|
300 |
+
$store = new ActionScheduler_wpPostStore();
|
301 |
+
$action_id = $store->save_action($action);
|
302 |
+
|
303 |
+
$this->assertEquals( ActionScheduler_Store::STATUS_PENDING, $store->get_status( $action_id ) );
|
304 |
+
|
305 |
+
$store->mark_complete( $action_id );
|
306 |
+
$this->assertEquals( ActionScheduler_Store::STATUS_COMPLETE, $store->get_status( $action_id ) );
|
307 |
+
|
308 |
+
$store->mark_failure( $action_id );
|
309 |
+
$this->assertEquals( ActionScheduler_Store::STATUS_FAILED, $store->get_status( $action_id ) );
|
310 |
+
}
|
311 |
+
|
312 |
+
public function test_claim_actions_by_hooks() {
|
313 |
+
$hook1 = __FUNCTION__ . '_hook_1';
|
314 |
+
$hook2 = __FUNCTION__ . '_hook_2';
|
315 |
+
$store = new ActionScheduler_wpPostStore();
|
316 |
+
$schedule = new ActionScheduler_SimpleSchedule( as_get_datetime_object( '-1 hour' ) );
|
317 |
+
|
318 |
+
$action1 = $store->save_action( new ActionScheduler_Action( $hook1, array(), $schedule ) );
|
319 |
+
$action2 = $store->save_action( new ActionScheduler_Action( $hook2, array(), $schedule ) );
|
320 |
+
|
321 |
+
// Claiming no hooks should include all actions.
|
322 |
+
$claim = $store->stake_claim( 10 );
|
323 |
+
$this->assertEquals( 2, count( $claim->get_actions() ) );
|
324 |
+
$this->assertTrue( in_array( $action1, $claim->get_actions() ) );
|
325 |
+
$this->assertTrue( in_array( $action2, $claim->get_actions() ) );
|
326 |
+
$store->release_claim( $claim );
|
327 |
+
|
328 |
+
// Claiming a hook should claim only actions with that hook
|
329 |
+
$claim = $store->stake_claim( 10, null, array( $hook1 ) );
|
330 |
+
$this->assertEquals( 1, count( $claim->get_actions() ) );
|
331 |
+
$this->assertTrue( in_array( $action1, $claim->get_actions() ) );
|
332 |
+
$store->release_claim( $claim );
|
333 |
+
|
334 |
+
// Claiming two hooks should claim actions with either of those hooks
|
335 |
+
$claim = $store->stake_claim( 10, null, array( $hook1, $hook2 ) );
|
336 |
+
$this->assertEquals( 2, count( $claim->get_actions() ) );
|
337 |
+
$this->assertTrue( in_array( $action1, $claim->get_actions() ) );
|
338 |
+
$this->assertTrue( in_array( $action2, $claim->get_actions() ) );
|
339 |
+
$store->release_claim( $claim );
|
340 |
+
|
341 |
+
// Claiming two hooks should claim actions with either of those hooks
|
342 |
+
$claim = $store->stake_claim( 10, null, array( __METHOD__ . '_hook_3' ) );
|
343 |
+
$this->assertEquals( 0, count( $claim->get_actions() ) );
|
344 |
+
$this->assertFalse( in_array( $action1, $claim->get_actions() ) );
|
345 |
+
$this->assertFalse( in_array( $action2, $claim->get_actions() ) );
|
346 |
+
$store->release_claim( $claim );
|
347 |
+
}
|
348 |
+
|
349 |
+
/**
|
350 |
+
* @issue 121
|
351 |
+
*/
|
352 |
+
public function test_claim_actions_by_group() {
|
353 |
+
$group1 = md5( rand() );
|
354 |
+
$store = new ActionScheduler_wpPostStore();
|
355 |
+
$schedule = new ActionScheduler_SimpleSchedule( as_get_datetime_object( '-1 hour' ) );
|
356 |
+
|
357 |
+
$action1 = $store->save_action( new ActionScheduler_Action( __METHOD__, array(), $schedule, $group1 ) );
|
358 |
+
$action2 = $store->save_action( new ActionScheduler_Action( __METHOD__, array(), $schedule ) );
|
359 |
+
|
360 |
+
// Claiming no group should include all actions.
|
361 |
+
$claim = $store->stake_claim( 10 );
|
362 |
+
$this->assertEquals( 2, count( $claim->get_actions() ) );
|
363 |
+
$this->assertTrue( in_array( $action1, $claim->get_actions() ) );
|
364 |
+
$this->assertTrue( in_array( $action2, $claim->get_actions() ) );
|
365 |
+
$store->release_claim( $claim );
|
366 |
+
|
367 |
+
// Claiming a group should claim only actions in that group.
|
368 |
+
$claim = $store->stake_claim( 10, null, array(), $group1 );
|
369 |
+
$this->assertEquals( 1, count( $claim->get_actions() ) );
|
370 |
+
$this->assertTrue( in_array( $action1, $claim->get_actions() ) );
|
371 |
+
$store->release_claim( $claim );
|
372 |
+
}
|
373 |
+
|
374 |
+
public function test_claim_actions_by_hook_and_group() {
|
375 |
+
$hook1 = __FUNCTION__ . '_hook_1';
|
376 |
+
$hook2 = __FUNCTION__ . '_hook_2';
|
377 |
+
$hook3 = __FUNCTION__ . '_hook_3';
|
378 |
+
$group1 = 'group_' . md5( rand() );
|
379 |
+
$group2 = 'group_' . md5( rand() );
|
380 |
+
$store = new ActionScheduler_wpPostStore();
|
381 |
+
$schedule = new ActionScheduler_SimpleSchedule( as_get_datetime_object( '-1 hour' ) );
|
382 |
+
|
383 |
+
$action1 = $store->save_action( new ActionScheduler_Action( $hook1, array(), $schedule, $group1 ) );
|
384 |
+
$action2 = $store->save_action( new ActionScheduler_Action( $hook2, array(), $schedule ) );
|
385 |
+
$action3 = $store->save_action( new ActionScheduler_Action( $hook3, array(), $schedule, $group2 ) );
|
386 |
+
|
387 |
+
// Claiming no hooks or group should include all actions.
|
388 |
+
$claim = $store->stake_claim( 10 );
|
389 |
+
$this->assertEquals( 3, count( $claim->get_actions() ) );
|
390 |
+
$this->assertTrue( in_array( $action1, $claim->get_actions() ) );
|
391 |
+
$this->assertTrue( in_array( $action2, $claim->get_actions() ) );
|
392 |
+
$store->release_claim( $claim );
|
393 |
+
|
394 |
+
// Claiming a group and hook should claim only actions in that group.
|
395 |
+
$claim = $store->stake_claim( 10, null, array( $hook1 ), $group1 );
|
396 |
+
$this->assertEquals( 1, count( $claim->get_actions() ) );
|
397 |
+
$this->assertTrue( in_array( $action1, $claim->get_actions() ) );
|
398 |
+
$store->release_claim( $claim );
|
399 |
+
|
400 |
+
// Claiming a group and hook should claim only actions with that hook in that group.
|
401 |
+
$claim = $store->stake_claim( 10, null, array( $hook2 ), $group1 );
|
402 |
+
$this->assertEquals( 0, count( $claim->get_actions() ) );
|
403 |
+
$this->assertFalse( in_array( $action1, $claim->get_actions() ) );
|
404 |
+
$this->assertFalse( in_array( $action2, $claim->get_actions() ) );
|
405 |
+
$store->release_claim( $claim );
|
406 |
+
|
407 |
+
// Claiming a group and hook should claim only actions with that hook in that group.
|
408 |
+
$claim = $store->stake_claim( 10, null, array( $hook1, $hook2 ), $group2 );
|
409 |
+
$this->assertEquals( 0, count( $claim->get_actions() ) );
|
410 |
+
$this->assertFalse( in_array( $action1, $claim->get_actions() ) );
|
411 |
+
$this->assertFalse( in_array( $action2, $claim->get_actions() ) );
|
412 |
+
$store->release_claim( $claim );
|
413 |
+
}
|
414 |
+
}
|
packages/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 |
+
}
|
packages/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 |
+
}
|
packages/action-scheduler/tests/phpunit/logging/ActionScheduler_wpCommentLogger_Test.php
ADDED
@@ -0,0 +1,211 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_wpCommentLogger_Test
|
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() {
|
21 |
+
$action_id = as_schedule_single_action( time(), 'a hook' );
|
22 |
+
$logger = ActionScheduler::logger();
|
23 |
+
$message = 'Logging that something happened';
|
24 |
+
$log_id = $logger->log( $action_id, $message );
|
25 |
+
$entry = $logger->get_entry( $log_id );
|
26 |
+
|
27 |
+
$this->assertEquals( $action_id, $entry->get_action_id() );
|
28 |
+
$this->assertEquals( $message, $entry->get_message() );
|
29 |
+
}
|
30 |
+
|
31 |
+
public function test_add_log_datetime() {
|
32 |
+
$action_id = as_schedule_single_action( time(), 'a hook' );
|
33 |
+
$logger = ActionScheduler::logger();
|
34 |
+
$message = 'Logging that something happened';
|
35 |
+
$date = new DateTime( 'now', new DateTimeZone( 'UTC' ) );
|
36 |
+
$log_id = $logger->log( $action_id, $message, $date );
|
37 |
+
$entry = $logger->get_entry( $log_id );
|
38 |
+
|
39 |
+
$this->assertEquals( $action_id, $entry->get_action_id() );
|
40 |
+
$this->assertEquals( $message, $entry->get_message() );
|
41 |
+
|
42 |
+
$date = new ActionScheduler_DateTime( 'now', new DateTimeZone( 'UTC' ) );
|
43 |
+
$log_id = $logger->log( $action_id, $message, $date );
|
44 |
+
$entry = $logger->get_entry( $log_id );
|
45 |
+
|
46 |
+
$this->assertEquals( $action_id, $entry->get_action_id() );
|
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,
|
53 |
+
'comment_author' => 'test',
|
54 |
+
'comment_content' => 'this is not a log entry',
|
55 |
+
));
|
56 |
+
$logger = ActionScheduler::logger();
|
57 |
+
$entry = $logger->get_entry( $comment );
|
58 |
+
$this->assertEquals( '', $entry->get_action_id() );
|
59 |
+
$this->assertEquals( '', $entry->get_message() );
|
60 |
+
}
|
61 |
+
|
62 |
+
public function test_storage_comments() {
|
63 |
+
$action_id = as_schedule_single_action( time(), 'a hook' );
|
64 |
+
$logger = ActionScheduler::logger();
|
65 |
+
$logs = $logger->get_logs( $action_id );
|
66 |
+
$expected = new ActionScheduler_LogEntry( $action_id, 'action created' );
|
67 |
+
$this->assertTrue( in_array( $this->log_entry_to_array( $expected ) , $this->log_entry_to_array( $logs ) ) );
|
68 |
+
}
|
69 |
+
|
70 |
+
protected function log_entry_to_array( $logs ) {
|
71 |
+
if ( $logs instanceof ActionScheduler_LogEntry ) {
|
72 |
+
return array( 'action_id' => $logs->get_action_id(), 'message' => $logs->get_message() );
|
73 |
+
}
|
74 |
+
|
75 |
+
foreach ( $logs as $id => $log) {
|
76 |
+
$logs[ $id ] = array( 'action_id' => $log->get_action_id(), 'message' => $log->get_message() );
|
77 |
+
}
|
78 |
+
|
79 |
+
return $logs;
|
80 |
+
}
|
81 |
+
|
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 ) ) );
|
93 |
+
$this->assertTrue( in_array( $this->log_entry_to_array( $finished ), $this->log_entry_to_array( $logs ) ) );
|
94 |
+
}
|
95 |
+
|
96 |
+
public function test_failed_execution_comments() {
|
97 |
+
$hook = md5(rand());
|
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 ) ) );
|
110 |
+
$this->assertFalse( in_array( $this->log_entry_to_array( $finished ), $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 );
|
132 |
+
$logger = ActionScheduler::logger();
|
133 |
+
do_action( 'action_scheduler_unexpected_shutdown', $action_id, array(
|
134 |
+
'type' => E_ERROR,
|
135 |
+
'message' => 'Test error',
|
136 |
+
'file' => __FILE__,
|
137 |
+
'line' => __LINE__,
|
138 |
+
));
|
139 |
+
|
140 |
+
$logs = $logger->get_logs( $action_id );
|
141 |
+
$found_log = FALSE;
|
142 |
+
foreach ( $logs as $l ) {
|
143 |
+
if ( strpos( $l->get_message(), 'unexpected shutdown' ) === 0 ) {
|
144 |
+
$found_log = TRUE;
|
145 |
+
}
|
146 |
+
}
|
147 |
+
$this->assertTrue( $found_log, 'Unexpected shutdown log not found' );
|
148 |
+
}
|
149 |
+
|
150 |
+
public function test_canceled_action_comments() {
|
151 |
+
$action_id = as_schedule_single_action( time(), 'a hook' );
|
152 |
+
as_unschedule_action( 'a hook' );
|
153 |
+
$logger = ActionScheduler::logger();
|
154 |
+
$logs = $logger->get_logs( $action_id );
|
155 |
+
$expected = new ActionScheduler_LogEntry( $action_id, 'action canceled' );
|
156 |
+
$this->assertTrue( in_array( $this->log_entry_to_array( $expected ), $this->log_entry_to_array( $logs ) ) );
|
157 |
+
}
|
158 |
+
|
159 |
+
public function _a_hook_callback_that_throws_an_exception() {
|
160 |
+
throw new RuntimeException('Execution failed');
|
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 |
+
));
|
171 |
+
$comment_id = $this->factory->comment->create_object(array(
|
172 |
+
'comment_post_ID' => $post_id,
|
173 |
+
'comment_author' => __CLASS__,
|
174 |
+
'comment_content' => __FUNCTION__,
|
175 |
+
));
|
176 |
+
|
177 |
+
// Verify that we're getting the expected comment before we add logging comments
|
178 |
+
$comments = get_comments();
|
179 |
+
$this->assertCount( 1, $comments );
|
180 |
+
$this->assertEquals( $comment_id, $comments[0]->comment_ID );
|
181 |
+
|
182 |
+
|
183 |
+
$action_id = as_schedule_single_action( time(), 'a hook' );
|
184 |
+
$logger = ActionScheduler::logger();
|
185 |
+
$message = 'Logging that something happened';
|
186 |
+
$log_id = $logger->log( $action_id, $message );
|
187 |
+
|
188 |
+
|
189 |
+
// Verify that logging comments are excluded from general comment queries
|
190 |
+
$comments = get_comments();
|
191 |
+
$this->assertCount( 1, $comments );
|
192 |
+
$this->assertEquals( $comment_id, $comments[0]->comment_ID );
|
193 |
+
|
194 |
+
// Verify that logging comments are returned when asking for them specifically
|
195 |
+
$comments = get_comments(array(
|
196 |
+
'type' => ActionScheduler_wpCommentLogger::TYPE,
|
197 |
+
));
|
198 |
+
// Expecting two: one when the action is created, another when we added our custom log
|
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 |
+
|
packages/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 |
+
}
|
packages/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 |
+
}
|
packages/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 |
+
}
|
packages/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 |
+
}
|
packages/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 |
+
}
|
packages/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 |
+
}
|
packages/action-scheduler/tests/phpunit/procedural_api/procedural_api_Test.php
ADDED
@@ -0,0 +1,259 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class procedural_api_Test
|
5 |
+
*/
|
6 |
+
class procedural_api_Test extends ActionScheduler_UnitTestCase {
|
7 |
+
|
8 |
+
public function test_schedule_action() {
|
9 |
+
$time = time();
|
10 |
+
$hook = md5(rand());
|
11 |
+
$action_id = as_schedule_single_action( $time, $hook );
|
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 |
+
|
19 |
+
public function test_recurring_action() {
|
20 |
+
$time = time();
|
21 |
+
$hook = md5(rand());
|
22 |
+
$action_id = as_schedule_recurring_action( $time, HOUR_IN_SECONDS, $hook );
|
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 |
+
|
31 |
+
public function test_cron_schedule() {
|
32 |
+
$time = as_get_datetime_object('2014-01-01');
|
33 |
+
$hook = md5(rand());
|
34 |
+
$action_id = as_schedule_cron_action( $time->getTimestamp(), '0 0 10 10 *', $hook );
|
35 |
+
|
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() {
|
47 |
+
$time = as_get_datetime_object('tomorrow');
|
48 |
+
$hook = md5(rand());
|
49 |
+
as_schedule_recurring_action( $time->getTimestamp(), HOUR_IN_SECONDS, $hook );
|
50 |
+
|
51 |
+
$next = as_next_scheduled_action( $hook );
|
52 |
+
|
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() );
|
85 |
+
$args = array( rand(), rand() );
|
86 |
+
$group = 'test_group';
|
87 |
+
|
88 |
+
return array(
|
89 |
+
|
90 |
+
// Test with no args or group
|
91 |
+
array(
|
92 |
+
'time' => $time,
|
93 |
+
'hook' => $hook,
|
94 |
+
'args' => array(),
|
95 |
+
'group' => '',
|
96 |
+
),
|
97 |
+
|
98 |
+
// Test with args but no group
|
99 |
+
array(
|
100 |
+
'time' => $time,
|
101 |
+
'hook' => $hook,
|
102 |
+
'args' => $args,
|
103 |
+
'group' => '',
|
104 |
+
),
|
105 |
+
|
106 |
+
// Test with group but no args
|
107 |
+
array(
|
108 |
+
'time' => $time,
|
109 |
+
'hook' => $hook,
|
110 |
+
'args' => array(),
|
111 |
+
'group' => $group,
|
112 |
+
),
|
113 |
+
|
114 |
+
// Test with args & group
|
115 |
+
array(
|
116 |
+
'time' => $time,
|
117 |
+
'hook' => $hook,
|
118 |
+
'args' => $args,
|
119 |
+
'group' => $group,
|
120 |
+
),
|
121 |
+
);
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* @dataProvider provider_time_hook_args_group
|
126 |
+
*/
|
127 |
+
public function test_unschedule( $time, $hook, $args, $group ) {
|
128 |
+
|
129 |
+
$action_id_unscheduled = as_schedule_single_action( $time, $hook, $args, $group );
|
130 |
+
$action_scheduled_time = $time + 1;
|
131 |
+
$action_id_scheduled = as_schedule_single_action( $action_scheduled_time, $hook, $args, $group );
|
132 |
+
|
133 |
+
as_unschedule_action( $hook, $args, $group );
|
134 |
+
|
135 |
+
$next = as_next_scheduled_action( $hook, $args, $group );
|
136 |
+
$this->assertEquals( $action_scheduled_time, $next );
|
137 |
+
|
138 |
+
$store = ActionScheduler::store();
|
139 |
+
$unscheduled_action = $store->fetch_action( $action_id_unscheduled );
|
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 |
+
/**
|
156 |
+
* @dataProvider provider_time_hook_args_group
|
157 |
+
*/
|
158 |
+
public function test_unschedule_all( $time, $hook, $args, $group ) {
|
159 |
+
|
160 |
+
$hook = md5( $hook );
|
161 |
+
$action_ids = array();
|
162 |
+
|
163 |
+
for ( $i = 0; $i < 3; $i++ ) {
|
164 |
+
$action_ids[] = as_schedule_single_action( $time, $hook, $args, $group );
|
165 |
+
}
|
166 |
+
|
167 |
+
as_unschedule_all_actions( $hook, $args, $group );
|
168 |
+
|
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 |
+
|
187 |
+
public function test_as_get_datetime_object_default() {
|
188 |
+
|
189 |
+
$utc_now = new ActionScheduler_DateTime(null, new DateTimeZone('UTC'));
|
190 |
+
$as_now = as_get_datetime_object();
|
191 |
+
|
192 |
+
// Don't want to use 'U' as timestamps will always be in UTC
|
193 |
+
$this->assertEquals($utc_now->format('Y-m-d H:i:s'),$as_now->format('Y-m-d H:i:s'));
|
194 |
+
}
|
195 |
+
|
196 |
+
public function test_as_get_datetime_object_relative() {
|
197 |
+
|
198 |
+
$utc_tomorrow = new ActionScheduler_DateTime('tomorrow', new DateTimeZone('UTC'));
|
199 |
+
$as_tomorrow = as_get_datetime_object('tomorrow');
|
200 |
+
|
201 |
+
$this->assertEquals($utc_tomorrow->format('Y-m-d H:i:s'),$as_tomorrow->format('Y-m-d H:i:s'));
|
202 |
+
|
203 |
+
$utc_tomorrow = new ActionScheduler_DateTime('yesterday', new DateTimeZone('UTC'));
|
204 |
+
$as_tomorrow = as_get_datetime_object('yesterday');
|
205 |
+
|
206 |
+
$this->assertEquals($utc_tomorrow->format('Y-m-d H:i:s'),$as_tomorrow->format('Y-m-d H:i:s'));
|
207 |
+
}
|
208 |
+
|
209 |
+
public function test_as_get_datetime_object_fixed() {
|
210 |
+
|
211 |
+
$utc_tomorrow = new ActionScheduler_DateTime('29 February 2016', new DateTimeZone('UTC'));
|
212 |
+
$as_tomorrow = as_get_datetime_object('29 February 2016');
|
213 |
+
|
214 |
+
$this->assertEquals($utc_tomorrow->format('Y-m-d H:i:s'),$as_tomorrow->format('Y-m-d H:i:s'));
|
215 |
+
|
216 |
+
$utc_tomorrow = new ActionScheduler_DateTime('1st January 2024', new DateTimeZone('UTC'));
|
217 |
+
$as_tomorrow = as_get_datetime_object('1st January 2024');
|
218 |
+
|
219 |
+
$this->assertEquals($utc_tomorrow->format('Y-m-d H:i:s'),$as_tomorrow->format('Y-m-d H:i:s'));
|
220 |
+
}
|
221 |
+
|
222 |
+
public function test_as_get_datetime_object_timezone() {
|
223 |
+
|
224 |
+
$timezone_au = 'Australia/Brisbane';
|
225 |
+
$timezone_default = date_default_timezone_get();
|
226 |
+
|
227 |
+
date_default_timezone_set( $timezone_au );
|
228 |
+
|
229 |
+
$au_now = new ActionScheduler_DateTime(null);
|
230 |
+
$as_now = as_get_datetime_object();
|
231 |
+
|
232 |
+
// Make sure they're for the same time
|
233 |
+
$this->assertEquals($au_now->getTimestamp(),$as_now->getTimestamp());
|
234 |
+
|
235 |
+
// But not in the same timezone, as $as_now should be using UTC
|
236 |
+
$this->assertNotEquals($au_now->format('Y-m-d H:i:s'),$as_now->format('Y-m-d H:i:s'));
|
237 |
+
|
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'));
|
245 |
+
|
246 |
+
// Just in cases
|
247 |
+
date_default_timezone_set( $timezone_default );
|
248 |
+
}
|
249 |
+
|
250 |
+
public function test_as_get_datetime_object_type() {
|
251 |
+
$f = 'Y-m-d H:i:s';
|
252 |
+
$now = as_get_datetime_object();
|
253 |
+
$this->assertInstanceOf( 'ActionScheduler_DateTime', $now );
|
254 |
+
|
255 |
+
$dateTime = new DateTime( 'now', new DateTimeZone( 'UTC' ) );
|
256 |
+
$asDateTime = as_get_datetime_object( $dateTime );
|
257 |
+
$this->assertEquals( $dateTime->format( $f ), $asDateTime->format( $f ) );
|
258 |
+
}
|
259 |
+
}
|
packages/action-scheduler/tests/phpunit/procedural_api/wc_get_scheduled_actions_Test.php
ADDED
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class as_get_scheduled_actions_Test
|
5 |
+
*/
|
6 |
+
class as_get_scheduled_actions_Test extends ActionScheduler_UnitTestCase {
|
7 |
+
private $hooks = array();
|
8 |
+
private $args = array();
|
9 |
+
private $groups = array();
|
10 |
+
|
11 |
+
public function setUp() {
|
12 |
+
parent::setUp();
|
13 |
+
|
14 |
+
$store = ActionScheduler::store();
|
15 |
+
|
16 |
+
for ( $i = 0 ; $i < 10 ; $i++ ) {
|
17 |
+
$this->hooks[$i] = md5(rand());
|
18 |
+
$this->args[$i] = md5(rand());
|
19 |
+
$this->groups[$i] = md5(rand());
|
20 |
+
}
|
21 |
+
|
22 |
+
for ( $i = 0 ; $i < 10 ; $i++ ) {
|
23 |
+
for ( $j = 0 ; $j < 10 ; $j++ ) {
|
24 |
+
$schedule = new ActionScheduler_SimpleSchedule( as_get_datetime_object( $j - 3 . 'days') );
|
25 |
+
$group = $this->groups[ ( $i + $j ) % 10 ];
|
26 |
+
$action = new ActionScheduler_Action( $this->hooks[$i], array($this->args[$j]), $schedule, $group );
|
27 |
+
$store->save_action( $action );
|
28 |
+
}
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
public function test_date_queries() {
|
33 |
+
$actions = as_get_scheduled_actions(array(
|
34 |
+
'date' => as_get_datetime_object(gmdate('Y-m-d 00:00:00')),
|
35 |
+
'per_page' => -1,
|
36 |
+
), 'ids');
|
37 |
+
$this->assertCount(30, $actions);
|
38 |
+
|
39 |
+
$actions = as_get_scheduled_actions(array(
|
40 |
+
'date' => as_get_datetime_object(gmdate('Y-m-d 00:00:00')),
|
41 |
+
'date_compare' => '>=',
|
42 |
+
'per_page' => -1,
|
43 |
+
), 'ids');
|
44 |
+
$this->assertCount(70, $actions);
|
45 |
+
}
|
46 |
+
|
47 |
+
public function test_hook_queries() {
|
48 |
+
$actions = as_get_scheduled_actions(array(
|
49 |
+
'hook' => $this->hooks[2],
|
50 |
+
'per_page' => -1,
|
51 |
+
), 'ids');
|
52 |
+
$this->assertCount(10, $actions);
|
53 |
+
|
54 |
+
$actions = as_get_scheduled_actions(array(
|
55 |
+
'hook' => $this->hooks[2],
|
56 |
+
'date' => as_get_datetime_object(gmdate('Y-m-d 00:00:00')),
|
57 |
+
'per_page' => -1,
|
58 |
+
), 'ids');
|
59 |
+
$this->assertCount(3, $actions);
|
60 |
+
}
|
61 |
+
|
62 |
+
public function test_args_queries() {
|
63 |
+
$actions = as_get_scheduled_actions(array(
|
64 |
+
'args' => array($this->args[5]),
|
65 |
+
'per_page' => -1,
|
66 |
+
), 'ids');
|
67 |
+
$this->assertCount(10, $actions);
|
68 |
+
|
69 |
+
$actions = as_get_scheduled_actions(array(
|
70 |
+
'args' => array($this->args[5]),
|
71 |
+
'hook' => $this->hooks[3],
|
72 |
+
'per_page' => -1,
|
73 |
+
), 'ids');
|
74 |
+
$this->assertCount(1, $actions);
|
75 |
+
|
76 |
+
$actions = as_get_scheduled_actions(array(
|
77 |
+
'args' => array($this->args[5]),
|
78 |
+
'hook' => $this->hooks[3],
|
79 |
+
'date' => as_get_datetime_object(gmdate('Y-m-d 00:00:00')),
|
80 |
+
'per_page' => -1,
|
81 |
+
), 'ids');
|
82 |
+
$this->assertCount(0, $actions);
|
83 |
+
}
|
84 |
+
|
85 |
+
public function test_group_queries() {
|
86 |
+
$actions = as_get_scheduled_actions(array(
|
87 |
+
'group' => $this->groups[1],
|
88 |
+
'per_page' => -1,
|
89 |
+
), 'ids');
|
90 |
+
$this->assertCount(10, $actions);
|
91 |
+
|
92 |
+
$actions = as_get_scheduled_actions(array(
|
93 |
+
'group' => $this->groups[1],
|
94 |
+
'hook' => $this->hooks[9],
|
95 |
+
'per_page' => -1,
|
96 |
+
), 'ids');
|
97 |
+
$this->assertCount(1, $actions);
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
packages/action-scheduler/tests/phpunit/runner/ActionScheduler_QueueCleaner_Test.php
ADDED
@@ -0,0 +1,151 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_QueueCleaner_Test
|
5 |
+
*/
|
6 |
+
class ActionScheduler_QueueCleaner_Test extends ActionScheduler_UnitTestCase {
|
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'));
|
14 |
+
|
15 |
+
$created_actions = array();
|
16 |
+
for ( $i = 0 ; $i < 5 ; $i++ ) {
|
17 |
+
$action = new ActionScheduler_Action( $random, array($random), $schedule );
|
18 |
+
$created_actions[] = $store->save_action( $action );
|
19 |
+
}
|
20 |
+
|
21 |
+
$runner->run();
|
22 |
+
|
23 |
+
add_filter( 'action_scheduler_retention_period', '__return_zero' ); // delete any finished job
|
24 |
+
$cleaner = new ActionScheduler_QueueCleaner( $store );
|
25 |
+
$cleaner->delete_old_actions();
|
26 |
+
remove_filter( 'action_scheduler_retention_period', '__return_zero' );
|
27 |
+
|
28 |
+
foreach ( $created_actions as $action_id ) {
|
29 |
+
$action = $store->fetch_action($action_id);
|
30 |
+
$this->assertFalse($action->is_finished()); // it's a NullAction
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
34 |
+
public function test_delete_canceled_actions() {
|
35 |
+
$store = ActionScheduler::store();
|
36 |
+
|
37 |
+
$random = md5(rand());
|
38 |
+
$schedule = new ActionScheduler_SimpleSchedule(as_get_datetime_object('1 day ago'));
|
39 |
+
|
40 |
+
$created_actions = array();
|
41 |
+
for ( $i = 0 ; $i < 5 ; $i++ ) {
|
42 |
+
$action = new ActionScheduler_Action( $random, array($random), $schedule );
|
43 |
+
$action_id = $store->save_action( $action );
|
44 |
+
$store->cancel_action( $action_id );
|
45 |
+
$created_actions[] = $action_id;
|
46 |
+
}
|
47 |
+
|
48 |
+
// track the actions that are deleted
|
49 |
+
$mock_action = new MockAction();
|
50 |
+
add_action( 'action_scheduler_deleted_action', array( $mock_action, 'action' ), 10, 1 );
|
51 |
+
add_filter( 'action_scheduler_retention_period', '__return_zero' ); // delete any finished job
|
52 |
+
|
53 |
+
$cleaner = new ActionScheduler_QueueCleaner( $store );
|
54 |
+
$cleaner->delete_old_actions();
|
55 |
+
|
56 |
+
remove_filter( 'action_scheduler_retention_period', '__return_zero' );
|
57 |
+
remove_action( 'action_scheduler_deleted_action', array( $mock_action, 'action' ), 10 );
|
58 |
+
|
59 |
+
$deleted_actions = array_map( 'reset', $mock_action->get_args() );
|
60 |
+
$this->assertEqualSets( $created_actions, $deleted_actions );
|
61 |
+
}
|
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'));
|
69 |
+
|
70 |
+
$created_actions = array();
|
71 |
+
for ( $i = 0 ; $i < 5 ; $i++ ) {
|
72 |
+
$action = new ActionScheduler_Action( $random, array($random), $schedule );
|
73 |
+
$created_actions[] = $store->save_action( $action );
|
74 |
+
}
|
75 |
+
|
76 |
+
$runner->run();
|
77 |
+
|
78 |
+
$cleaner = new ActionScheduler_QueueCleaner( $store );
|
79 |
+
$cleaner->delete_old_actions();
|
80 |
+
|
81 |
+
foreach ( $created_actions as $action_id ) {
|
82 |
+
$action = $store->fetch_action($action_id);
|
83 |
+
$this->assertTrue($action->is_finished()); // It's a FinishedAction
|
84 |
+
}
|
85 |
+
}
|
86 |
+
|
87 |
+
public function test_reset_unrun_actions() {
|
88 |
+
$store = ActionScheduler::store();
|
89 |
+
|
90 |
+
$random = md5(rand());
|
91 |
+
$schedule = new ActionScheduler_SimpleSchedule(as_get_datetime_object('1 day ago'));
|
92 |
+
|
93 |
+
$created_actions = array();
|
94 |
+
for ( $i = 0 ; $i < 5 ; $i++ ) {
|
95 |
+
$action = new ActionScheduler_Action( $random, array($random), $schedule );
|
96 |
+
$created_actions[] = $store->save_action( $action );
|
97 |
+
}
|
98 |
+
|
99 |
+
$store->stake_claim(10);
|
100 |
+
|
101 |
+
// don't actually process the jobs, to simulate a request that timed out
|
102 |
+
|
103 |
+
add_filter( 'action_scheduler_timeout_period', '__return_zero' ); // delete any finished job
|
104 |
+
$cleaner = new ActionScheduler_QueueCleaner( $store );
|
105 |
+
$cleaner->reset_timeouts();
|
106 |
+
|
107 |
+
remove_filter( 'action_scheduler_timeout_period', '__return_zero' );
|
108 |
+
|
109 |
+
$claim = $store->stake_claim(10);
|
110 |
+
$this->assertEqualSets($created_actions, $claim->get_actions());
|
111 |
+
}
|
112 |
+
|
113 |
+
public function test_do_not_reset_failed_action() {
|
114 |
+
$store = ActionScheduler::store();
|
115 |
+
|
116 |
+
$random = md5(rand());
|
117 |
+
$schedule = new ActionScheduler_SimpleSchedule(as_get_datetime_object('1 day ago'));
|
118 |
+
|
119 |
+
$created_actions = array();
|
120 |
+
for ( $i = 0 ; $i < 5 ; $i++ ) {
|
121 |
+
$action = new ActionScheduler_Action( $random, array($random), $schedule );
|
122 |
+
$created_actions[] = $store->save_action( $action );
|
123 |
+
}
|
124 |
+
|
125 |
+
$claim = $store->stake_claim(10);
|
126 |
+
foreach ( $claim->get_actions() as $action_id ) {
|
127 |
+
// simulate the first action interrupted by an uncatchable fatal error
|
128 |
+
$store->log_execution( $action_id );
|
129 |
+
break;
|
130 |
+
}
|
131 |
+
|
132 |
+
add_filter( 'action_scheduler_timeout_period', '__return_zero' ); // delete any finished job
|
133 |
+
$cleaner = new ActionScheduler_QueueCleaner( $store );
|
134 |
+
$cleaner->reset_timeouts();
|
135 |
+
remove_filter( 'action_scheduler_timeout_period', '__return_zero' );
|
136 |
+
|
137 |
+
$new_claim = $store->stake_claim(10);
|
138 |
+
$this->assertCount( 4, $new_claim->get_actions() );
|
139 |
+
|
140 |
+
add_filter( 'action_scheduler_failure_period', '__return_zero' );
|
141 |
+
$cleaner->mark_failures();
|
142 |
+
remove_filter( 'action_scheduler_failure_period', '__return_zero' );
|
143 |
+
|
144 |
+
$failed = $store->query_actions(array('status' => ActionScheduler_Store::STATUS_FAILED));
|
145 |
+
$this->assertEquals( $created_actions[0], $failed[0] );
|
146 |
+
$this->assertCount( 1, $failed );
|
147 |
+
|
148 |
+
|
149 |
+
}
|
150 |
+
}
|
151 |
+
|
packages/action-scheduler/tests/phpunit/runner/ActionScheduler_QueueRunner_Test.php
ADDED
@@ -0,0 +1,330 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_QueueRunner_Test
|
5 |
+
* @group runners
|
6 |
+
*/
|
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 );
|
14 |
+
}
|
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());
|
22 |
+
add_action( $random, array( $mock, 'action' ) );
|
23 |
+
$schedule = new ActionScheduler_SimpleSchedule(as_get_datetime_object('1 day ago'));
|
24 |
+
|
25 |
+
for ( $i = 0 ; $i < 5 ; $i++ ) {
|
26 |
+
$action = new ActionScheduler_Action( $random, array($random), $schedule );
|
27 |
+
$store->save_action( $action );
|
28 |
+
}
|
29 |
+
|
30 |
+
$actions_run = $runner->run();
|
31 |
+
|
32 |
+
remove_action( $random, array( $mock, 'action' ) );
|
33 |
+
|
34 |
+
$this->assertEquals( 5, $mock->get_call_count() );
|
35 |
+
$this->assertEquals( 5, $actions_run );
|
36 |
+
}
|
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());
|
44 |
+
add_action( $random, array( $mock, 'action' ) );
|
45 |
+
$schedule = new ActionScheduler_SimpleSchedule(as_get_datetime_object('1 day ago'));
|
46 |
+
|
47 |
+
for ( $i = 0 ; $i < 3 ; $i++ ) {
|
48 |
+
$action = new ActionScheduler_Action( $random, array($random), $schedule );
|
49 |
+
$store->save_action( $action );
|
50 |
+
}
|
51 |
+
|
52 |
+
$schedule = new ActionScheduler_SimpleSchedule(as_get_datetime_object('tomorrow'));
|
53 |
+
for ( $i = 0 ; $i < 3 ; $i++ ) {
|
54 |
+
$action = new ActionScheduler_Action( $random, array($random), $schedule );
|
55 |
+
$store->save_action( $action );
|
56 |
+
}
|
57 |
+
|
58 |
+
$actions_run = $runner->run();
|
59 |
+
|
60 |
+
remove_action( $random, array( $mock, 'action' ) );
|
61 |
+
|
62 |
+
$this->assertEquals( 3, $mock->get_call_count() );
|
63 |
+
$this->assertEquals( 3, $actions_run );
|
64 |
+
}
|
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'));
|
72 |
+
|
73 |
+
$action = new ActionScheduler_Action( $random, array(), $schedule );
|
74 |
+
$action_id = $store->save_action( $action );
|
75 |
+
|
76 |
+
$runner->run();
|
77 |
+
|
78 |
+
$finished_action = $store->fetch_action( $action_id );
|
79 |
+
|
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'));
|
225 |
+
|
226 |
+
for ( $i = 0 ; $i < 30 ; $i++ ) {
|
227 |
+
$action = new ActionScheduler_Action( $random, array($random), $schedule );
|
228 |
+
$store->save_action( $action );
|
229 |
+
}
|
230 |
+
|
231 |
+
$claims = array();
|
232 |
+
|
233 |
+
for ( $i = 0 ; $i < 5 ; $i++ ) {
|
234 |
+
$claims[] = $store->stake_claim( 5 );
|
235 |
+
}
|
236 |
+
|
237 |
+
$mock1 = new MockAction();
|
238 |
+
add_action( $random, array( $mock1, 'action' ) );
|
239 |
+
$actions_run = $runner->run();
|
240 |
+
remove_action( $random, array( $mock1, 'action' ) );
|
241 |
+
|
242 |
+
$this->assertEquals( 0, $mock1->get_call_count() );
|
243 |
+
$this->assertEquals( 0, $actions_run );
|
244 |
+
|
245 |
+
|
246 |
+
add_filter( 'action_scheduler_queue_runner_concurrent_batches', array( $this, 'return_6' ) );
|
247 |
+
|
248 |
+
$mock2 = new MockAction();
|
249 |
+
add_action( $random, array( $mock2, 'action' ) );
|
250 |
+
$actions_run = $runner->run();
|
251 |
+
remove_action( $random, array( $mock2, 'action' ) );
|
252 |
+
|
253 |
+
$this->assertEquals( 5, $mock2->get_call_count() );
|
254 |
+
$this->assertEquals( 5, $actions_run );
|
255 |
+
|
256 |
+
remove_filter( 'action_scheduler_queue_runner_concurrent_batches', array( $this, 'return_6' ) );
|
257 |
+
|
258 |
+
for ( $i = 0 ; $i < 5 ; $i++ ) { // to make up for the actions we just processed
|
259 |
+
$action = new ActionScheduler_Action( $random, array($random), $schedule );
|
260 |
+
$store->save_action( $action );
|
261 |
+
}
|
262 |
+
|
263 |
+
$mock3 = new MockAction();
|
264 |
+
add_action( $random, array( $mock3, 'action' ) );
|
265 |
+
$actions_run = $runner->run();
|
266 |
+
remove_action( $random, array( $mock3, 'action' ) );
|
267 |
+
|
268 |
+
$this->assertEquals( 0, $mock3->get_call_count() );
|
269 |
+
$this->assertEquals( 0, $actions_run );
|
270 |
+
|
271 |
+
remove_filter( 'action_scheduler_queue_runner_concurrent_batches', array( $this, 'return_6' ) );
|
272 |
+
}
|
273 |
+
|
274 |
+
public function return_6() {
|
275 |
+
return 6;
|
276 |
+
}
|
277 |
+
|
278 |
+
public function test_store_fetch_action_failure_schedule_next_instance() {
|
279 |
+
$random = md5( rand() );
|
280 |
+
$schedule = new ActionScheduler_IntervalSchedule( as_get_datetime_object( '12 hours ago' ), DAY_IN_SECONDS );
|
281 |
+
$action = new ActionScheduler_Action( $random, array(), $schedule );
|
282 |
+
$action_id = ActionScheduler::store()->save_action( $action );
|
283 |
+
|
284 |
+
// Set up a mock store that will throw an exception when fetching actions.
|
285 |
+
$store = $this
|
286 |
+
->getMockBuilder( 'ActionScheduler_wpPostStore' )
|
287 |
+
->setMethods( array( 'fetch_action' ) )
|
288 |
+
->getMock();
|
289 |
+
$store
|
290 |
+
->method( 'fetch_action' )
|
291 |
+
->with( $action_id )
|
292 |
+
->will( $this->throwException( new Exception() ) );
|
293 |
+
|
294 |
+
// Set up a mock queue runner to verify that schedule_next_instance()
|
295 |
+
// isn't called for an undefined $action.
|
296 |
+
$runner = $this
|
297 |
+
->getMockBuilder( 'ActionScheduler_QueueRunner' )
|
298 |
+
->setConstructorArgs( array( $store ) )
|
299 |
+
->setMethods( array( 'schedule_next_instance' ) )
|
300 |
+
->getMock();
|
301 |
+
$runner
|
302 |
+
->expects( $this->never() )
|
303 |
+
->method( 'schedule_next_instance' );
|
304 |
+
|
305 |
+
$runner->run();
|
306 |
+
|
307 |
+
// Set up a mock store that will throw an exception when fetching actions.
|
308 |
+
$store2 = $this
|
309 |
+
->getMockBuilder( 'ActionScheduler_wpPostStore' )
|
310 |
+
->setMethods( array( 'fetch_action' ) )
|
311 |
+
->getMock();
|
312 |
+
$store2
|
313 |
+
->method( 'fetch_action' )
|
314 |
+
->with( $action_id )
|
315 |
+
->willReturn( null );
|
316 |
+
|
317 |
+
// Set up a mock queue runner to verify that schedule_next_instance()
|
318 |
+
// isn't called for an undefined $action.
|
319 |
+
$runner2 = $this
|
320 |
+
->getMockBuilder( 'ActionScheduler_QueueRunner' )
|
321 |
+
->setConstructorArgs( array( $store ) )
|
322 |
+
->setMethods( array( 'schedule_next_instance' ) )
|
323 |
+
->getMock();
|
324 |
+
$runner2
|
325 |
+
->expects( $this->never() )
|
326 |
+
->method( 'schedule_next_instance' );
|
327 |
+
|
328 |
+
$runner2->run();
|
329 |
+
}
|
330 |
+
}
|
packages/action-scheduler/tests/phpunit/schedules/ActionScheduler_CronSchedule_Test.php
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_CronSchedule_Test
|
5 |
+
* @group schedules
|
6 |
+
*/
|
7 |
+
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 |
+
$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() {
|
54 |
+
$schedule = new ActionScheduler_CronSchedule(as_get_datetime_object('2013-06-14'), CronExpression::factory('@daily'));
|
55 |
+
$this->assertTrue( $schedule->is_recurring() );
|
56 |
+
}
|
57 |
+
|
58 |
+
public function test_cron_format() {
|
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 |
+
|
packages/action-scheduler/tests/phpunit/schedules/ActionScheduler_IntervalSchedule_Test.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_IntervalSchedule_Test
|
5 |
+
* @group schedules
|
6 |
+
*/
|
7 |
+
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->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() {
|
33 |
+
$start = time() - 30;
|
34 |
+
$schedule = new ActionScheduler_IntervalSchedule( as_get_datetime_object("@$start"), MINUTE_IN_SECONDS );
|
35 |
+
$this->assertTrue( $schedule->is_recurring() );
|
36 |
+
}
|
37 |
+
}
|
packages/action-scheduler/tests/phpunit/schedules/ActionScheduler_NullSchedule_Test.php
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_NullSchedule_Test
|
5 |
+
* @group schedules
|
6 |
+
*/
|
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() {
|
14 |
+
$schedule = new ActionScheduler_NullSchedule();
|
15 |
+
$this->assertFalse( $schedule->is_recurring() );
|
16 |
+
}
|
17 |
+
}
|
18 |
+
|
packages/action-scheduler/tests/phpunit/schedules/ActionScheduler_SimpleSchedule_Test.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_SimpleSchedule_Test
|
5 |
+
* @group schedules
|
6 |
+
*/
|
7 |
+
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->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() {
|
33 |
+
$schedule = new ActionScheduler_SimpleSchedule(as_get_datetime_object('+1 day'));
|
34 |
+
$this->assertFalse( $schedule->is_recurring() );
|
35 |
+
}
|
36 |
+
}
|
37 |
+
|
packages/action-scheduler/tests/phpunit/versioning/ActionScheduler_Versions_Test.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_Versions_Test
|
5 |
+
*/
|
6 |
+
class ActionScheduler_Versions_Test extends ActionScheduler_UnitTestCase {
|
7 |
+
public function test_register_version() {
|
8 |
+
$versions = new ActionScheduler_Versions();
|
9 |
+
$versions->register('1.0-dev', 'callback_1_dot_0_dev');
|
10 |
+
$versions->register('1.0', 'callback_1_dot_0');
|
11 |
+
|
12 |
+
$registered = $versions->get_versions();
|
13 |
+
|
14 |
+
$this->assertArrayHasKey( '1.0-dev', $registered );
|
15 |
+
$this->assertArrayHasKey( '1.0', $registered );
|
16 |
+
$this->assertCount( 2, $registered );
|
17 |
+
|
18 |
+
$this->assertEquals( 'callback_1_dot_0_dev', $registered['1.0-dev'] );
|
19 |
+
}
|
20 |
+
|
21 |
+
public function test_duplicate_version() {
|
22 |
+
$versions = new ActionScheduler_Versions();
|
23 |
+
$versions->register('1.0', 'callback_1_dot_0_a');
|
24 |
+
$versions->register('1.0', 'callback_1_dot_0_b');
|
25 |
+
|
26 |
+
$registered = $versions->get_versions();
|
27 |
+
|
28 |
+
$this->assertArrayHasKey( '1.0', $registered );
|
29 |
+
$this->assertCount( 1, $registered );
|
30 |
+
}
|
31 |
+
|
32 |
+
public function test_latest_version() {
|
33 |
+
$versions = new ActionScheduler_Versions();
|
34 |
+
$this->assertEquals('__return_null', $versions->latest_version_callback() );
|
35 |
+
$versions->register('1.2', 'callback_1_dot_2');
|
36 |
+
$versions->register('1.3', 'callback_1_dot_3');
|
37 |
+
$versions->register('1.0', 'callback_1_dot_0');
|
38 |
+
|
39 |
+
$this->assertEquals( '1.3', $versions->latest_version() );
|
40 |
+
$this->assertEquals( 'callback_1_dot_3', $versions->latest_version_callback() );
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
packages/action-scheduler/tests/travis/setup.sh
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/bin/sh
|
2 |
+
|
3 |
+
# WordPress test setup script for Travis CI
|
4 |
+
#
|
5 |
+
# Author: Benjamin J. Balter ( ben@balter.com | ben.balter.com )
|
6 |
+
# License: GPL3
|
7 |
+
|
8 |
+
export WP_CORE_DIR=/tmp/wordpress
|
9 |
+
export WP_TESTS_DIR=/tmp/wordpress-tests/tests/phpunit
|
10 |
+
|
11 |
+
if [[ "$1" = "5.6" || "$1" > "5.6" ]]
|
12 |
+
then
|
13 |
+
wget -c https://phar.phpunit.de/phpunit-5.7.phar
|
14 |
+
chmod +x phpunit-5.7.phar
|
15 |
+
mv phpunit-5.7.phar `which phpunit`
|
16 |
+
fi
|
17 |
+
|
18 |
+
plugin_slug=$(basename $(pwd))
|
19 |
+
plugin_dir=$WP_CORE_DIR/wp-content/plugins/$plugin_slug
|
20 |
+
|
21 |
+
# Init database
|
22 |
+
mysql -e 'CREATE DATABASE wordpress_test;' -uroot
|
23 |
+
|
24 |
+
# Grab specified version of WordPress from github
|
25 |
+
wget -nv -O /tmp/wordpress.tar.gz https://github.com/WordPress/WordPress/tarball/$WP_VERSION
|
26 |
+
mkdir -p $WP_CORE_DIR
|
27 |
+
tar --strip-components=1 -zxmf /tmp/wordpress.tar.gz -C $WP_CORE_DIR
|
28 |
+
|
29 |
+
# Grab testing framework
|
30 |
+
svn co --quiet https://develop.svn.wordpress.org/tags/$WP_VERSION/ /tmp/wordpress-tests
|
31 |
+
|
32 |
+
# Put various components in proper folders
|
33 |
+
cp tests/travis/wp-tests-config.php $WP_TESTS_DIR/wp-tests-config.php
|
34 |
+
|
35 |
+
cd ..
|
36 |
+
mv $plugin_slug $plugin_dir
|
37 |
+
|
38 |
+
cd $plugin_dir
|
packages/action-scheduler/tests/travis/wp-tests-config.php
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/* Path to the WordPress codebase you'd like to test. Add a backslash in the end. */
|
4 |
+
define( 'ABSPATH', getenv( 'WP_CORE_DIR' ) . '/' );
|
5 |
+
|
6 |
+
// Test with multisite enabled
|
7 |
+
define( 'WP_TESTS_MULTISITE', (bool) getenv( 'WP_MULTISITE' ) );
|
8 |
+
|
9 |
+
// Force known bugs
|
10 |
+
// define( 'WP_TESTS_FORCE_KNOWN_BUGS', true );
|
11 |
+
|
12 |
+
// Test with WordPress debug mode on
|
13 |
+
define( 'WP_DEBUG', true );
|
14 |
+
|
15 |
+
// ** MySQL settings ** //
|
16 |
+
|
17 |
+
// This configuration file will be used by the copy of WordPress being tested.
|
18 |
+
// wordpress/wp-config.php will be ignored.
|
19 |
+
|
20 |
+
// WARNING WARNING WARNING!
|
21 |
+
// These tests will DROP ALL TABLES in the database with the prefix named below.
|
22 |
+
// DO NOT use a production database or one that is shared with something else.
|
23 |
+
|
24 |
+
define( 'DB_NAME', 'wordpress_test' );
|
25 |
+
define( 'DB_USER', 'root' );
|
26 |
+
define( 'DB_PASSWORD', '' );
|
27 |
+
define( 'DB_HOST', 'localhost' );
|
28 |
+
define( 'DB_CHARSET', 'utf8' );
|
29 |
+
define( 'DB_COLLATE', '' );
|
30 |
+
|
31 |
+
define( 'WP_TESTS_DOMAIN', 'example.org' );
|
32 |
+
define( 'WP_TESTS_EMAIL', 'admin@example.org' );
|
33 |
+
define( 'WP_TESTS_TITLE', 'Test Blog' );
|
34 |
+
|
35 |
+
define( 'WP_PHP_BINARY', 'php' );
|
36 |
+
|
37 |
+
define( 'WPLANG', '' );
|
38 |
+
$table_prefix = 'wptests_';
|
phpunit.xml.dist
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<phpunit
|
3 |
+
bootstrap="tests/bootstrap.php"
|
4 |
+
backupGlobals="false"
|
5 |
+
colors="true"
|
6 |
+
convertErrorsToExceptions="true"
|
7 |
+
convertNoticesToExceptions="true"
|
8 |
+
convertWarningsToExceptions="true"
|
9 |
+
>
|
10 |
+
<testsuites>
|
11 |
+
<testsuite name="general">
|
12 |
+
<directory prefix="test-" suffix=".php">./tests/</directory>
|
13 |
+
</testsuite>
|
14 |
+
</testsuites>
|
15 |
+
</phpunit>
|
popup-maker.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Popup Maker
|
4 |
* Plugin URI: https://wppopupmaker.com/?utm_campaign=PluginInfo&utm_source=plugin-header&utm_medium=plugin-uri
|
5 |
* Description: Easily create & style popups with any content. Theme editor to quickly style your popups. Add forms, social media boxes, videos & more.
|
6 |
-
* Version: 1.
|
7 |
* Author: Popup Maker
|
8 |
* Author URI: https://wppopupmaker.com/?utm_campaign=PluginInfo&utm_source=plugin-header&utm_medium=author-uri
|
9 |
* License: GPL2 or later
|
@@ -93,7 +93,7 @@ class Popup_Maker {
|
|
93 |
/**
|
94 |
* @var string Plugin Version
|
95 |
*/
|
96 |
-
public static $VER = '1.
|
97 |
|
98 |
/**
|
99 |
* @var int DB Version
|
@@ -113,7 +113,7 @@ class Popup_Maker {
|
|
113 |
/**
|
114 |
* @var string
|
115 |
*/
|
116 |
-
public static $MIN_WP_VER = '
|
117 |
|
118 |
/**
|
119 |
* @var string Plugin URL
|
3 |
* Plugin Name: Popup Maker
|
4 |
* Plugin URI: https://wppopupmaker.com/?utm_campaign=PluginInfo&utm_source=plugin-header&utm_medium=plugin-uri
|
5 |
* Description: Easily create & style popups with any content. Theme editor to quickly style your popups. Add forms, social media boxes, videos & more.
|
6 |
+
* Version: 1.13.0
|
7 |
* Author: Popup Maker
|
8 |
* Author URI: https://wppopupmaker.com/?utm_campaign=PluginInfo&utm_source=plugin-header&utm_medium=author-uri
|
9 |
* License: GPL2 or later
|
93 |
/**
|
94 |
* @var string Plugin Version
|
95 |
*/
|
96 |
+
public static $VER = '1.13.0';
|
97 |
|
98 |
/**
|
99 |
* @var int DB Version
|
113 |
/**
|
114 |
* @var string
|
115 |
*/
|
116 |
+
public static $MIN_WP_VER = '4.9';
|
117 |
|
118 |
/**
|
119 |
* @var string Plugin URL
|
readme.txt
CHANGED
@@ -4,10 +4,10 @@ Author URI: https://wppopupmaker.com/?utm_campaign=readme&utm_medium=referral&ut
|
|
4 |
Plugin URI: https://wppopupmaker.com/?utm_campaign=readme&utm_medium=referral&utm_source=readme-header&utm_content=plugin-url
|
5 |
Donate link:
|
6 |
Tags: marketing, popup, popups, optin, conversion, responsive popups, promotion, popover, pop-up, pop over, lightbox, modal
|
7 |
-
Requires at least: 4.
|
8 |
Tested up to: 5.5
|
9 |
Requires PHP: 5.6
|
10 |
-
Stable tag: 1.
|
11 |
License: GPLv2 or later
|
12 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
13 |
|
@@ -178,6 +178,19 @@ There are several common causes for this, check [this guide for help](https://do
|
|
178 |
|
179 |
View our [complete changelog](https://github.com/PopupMaker/Popup-Maker/blob/master/CHANGELOG.md) for up-to-date information on what has been going on with the development of Popup Maker.
|
180 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
181 |
= v1.12.0 - 09/29/2020 =
|
182 |
* Feature: Add the ability to turn on/off popups [Issue #544](https://github.com/PopupMaker/Popup-Maker/issues/544)
|
183 |
* Feature: Formidable Forms integration [Issue #750](https://github.com/PopupMaker/Popup-Maker/issues/750)
|
@@ -192,24 +205,3 @@ View our [complete changelog](https://github.com/PopupMaker/Popup-Maker/blob/mas
|
|
192 |
* Fix: Form submission cookie not automatically setting "form" key [Issue #866](https://github.com/PopupMaker/Popup-Maker/issues/866)
|
193 |
* Fix: Trying to access 'private' key when the field is false error [Issue #873](https://github.com/PopupMaker/Popup-Maker/issues/873)
|
194 |
* Fix: _pum_subscribers table fails to create on MySQL 8.0.19+ due to VALUES keyword [Issue #876](https://github.com/PopupMaker/Popup-Maker/issues/876)
|
195 |
-
|
196 |
-
= v1.11.2 - 08/17/2020 =
|
197 |
-
* Fix: `wp_make_content_images_responsive` is deprecated, use `wp_filter_content_tags()` instead
|
198 |
-
* Fix: IE 11 does not support JS Promises
|
199 |
-
* Fix: Missing permission_callback on REST endpoint
|
200 |
-
|
201 |
-
= v1.11.1 - 07/22/2020 =
|
202 |
-
* Fix: Form submission cookies no longer set with Contact Form 7 5.2
|
203 |
-
|
204 |
-
= v1.11.0 - 06/25/2020 =
|
205 |
-
* Feature: Add new floating bar theme.
|
206 |
-
* Feature: New guided tour of popup editor for first time users.
|
207 |
-
* Feature: New href attribute on the popup_close shortcode for when setting the shortcode to use the `a` tag.
|
208 |
-
* Fix: Shortcode popup_close tag attribute not functioning properly.
|
209 |
-
* Tweak: Change popup_close tag setting to use a drop-down for more easily selecting which tag to use.
|
210 |
-
* Tweak: Improve explanation of cookies in new trigger modal.
|
211 |
-
* Tweak: Ensure all admin pages have visible page headings.
|
212 |
-
* Tweak: Simplify name and title fields in popup editor.
|
213 |
-
* Tweak: Add popup ID to quick links on All Popups.
|
214 |
-
* Tweak: Move CSS and JS for our admin bar node to external file.
|
215 |
-
* Tweak: Add our new optional telemetry system.
|
4 |
Plugin URI: https://wppopupmaker.com/?utm_campaign=readme&utm_medium=referral&utm_source=readme-header&utm_content=plugin-url
|
5 |
Donate link:
|
6 |
Tags: marketing, popup, popups, optin, conversion, responsive popups, promotion, popover, pop-up, pop over, lightbox, modal
|
7 |
+
Requires at least: 4.9
|
8 |
Tested up to: 5.5
|
9 |
Requires PHP: 5.6
|
10 |
+
Stable tag: 1.13.0
|
11 |
License: GPLv2 or later
|
12 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
13 |
|
178 |
|
179 |
View our [complete changelog](https://github.com/PopupMaker/Popup-Maker/blob/master/CHANGELOG.md) for up-to-date information on what has been going on with the development of Popup Maker.
|
180 |
|
181 |
+
= [v1.13.0 - 10/30/2020](https://github.com/PopupMaker/Popup-Maker/milestone/26) =
|
182 |
+
* Feature: Conversion tracking [Issue #775](https://github.com/PopupMaker/Popup-Maker/issues/775)
|
183 |
+
* Feature: Bypass adblockers for tracking opens and conversions [Issue #783](https://github.com/PopupMaker/Popup-Maker/issues/783)
|
184 |
+
* Feature: Periodical suggestions to improve plugin usage [Issue #834](https://github.com/PopupMaker/Popup-Maker/issues/834)
|
185 |
+
* Improvement: Reduce clutter in All Popups table [Issue #878](https://github.com/PopupMaker/Popup-Maker/issues/878)
|
186 |
+
* Improvement: Switch tab navigation to NAV elements instead of H2 [Issue #818](https://github.com/PopupMaker/Popup-Maker/issues/818)
|
187 |
+
* Improvement: Set up PHPUnit for integration and unit tests [Issue #563](https://github.com/PopupMaker/Popup-Maker/issues/563)
|
188 |
+
* Improvement: Continuously deploy readme and screenshot changes [Issue #827](https://github.com/PopupMaker/Popup-Maker/issues/827)
|
189 |
+
* Fix: AJAX for Gravity Forms not setting cookies [Issue #706](https://github.com/PopupMaker/Popup-Maker/issues/706)
|
190 |
+
* Fix: Disabling asset cache causes form integrations not to load their assets [Issue #755](https://github.com/PopupMaker/Popup-Maker/issues/755)
|
191 |
+
* Fix: Form submission cookies are not being set for some form integrations [Issue #886](https://github.com/PopupMaker/Popup-Maker/issues/886)
|
192 |
+
* Fix: Some form integrations are calling both AJAX and PHP submission handlers [Issue #887](https://github.com/PopupMaker/Popup-Maker/issues/887)
|
193 |
+
|
194 |
= v1.12.0 - 09/29/2020 =
|
195 |
* Feature: Add the ability to turn on/off popups [Issue #544](https://github.com/PopupMaker/Popup-Maker/issues/544)
|
196 |
* Feature: Formidable Forms integration [Issue #750](https://github.com/PopupMaker/Popup-Maker/issues/750)
|
205 |
* Fix: Form submission cookie not automatically setting "form" key [Issue #866](https://github.com/PopupMaker/Popup-Maker/issues/866)
|
206 |
* Fix: Trying to access 'private' key when the field is false error [Issue #873](https://github.com/PopupMaker/Popup-Maker/issues/873)
|
207 |
* Fix: _pum_subscribers table fails to create on MySQL 8.0.19+ due to VALUES keyword [Issue #876](https://github.com/PopupMaker/Popup-Maker/issues/876)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/bootstrap.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* PHPUnit bootstrap file
|
4 |
+
*
|
5 |
+
* @package Popup_Maker
|
6 |
+
*/
|
7 |
+
|
8 |
+
$_tests_dir = getenv( 'WP_TESTS_DIR' );
|
9 |
+
|
10 |
+
if ( ! $_tests_dir ) {
|
11 |
+
$_tests_dir = rtrim( sys_get_temp_dir(), '/\\' ) . '/wordpress-tests-lib';
|
12 |
+
}
|
13 |
+
|
14 |
+
if ( ! file_exists( $_tests_dir . '/includes/functions.php' ) ) {
|
15 |
+
echo "Could not find $_tests_dir/includes/functions.php, have you run bin/install-wp-tests.sh ?" . PHP_EOL; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
16 |
+
exit( 1 );
|
17 |
+
}
|
18 |
+
|
19 |
+
// Give access to tests_add_filter() function.
|
20 |
+
require_once $_tests_dir . '/includes/functions.php';
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Manually load the plugin being tested.
|
24 |
+
*/
|
25 |
+
function _manually_load_plugin() {
|
26 |
+
require dirname( dirname( __FILE__ ) ) . '/popup-maker.php';
|
27 |
+
}
|
28 |
+
tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );
|
29 |
+
|
30 |
+
// Start up the WP testing environment.
|
31 |
+
require $_tests_dir . '/includes/bootstrap.php';
|
tests/test-pum-analytics.php
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Class PUM_AnalyticsTEST
|
4 |
+
*
|
5 |
+
* @package Popup_Maker
|
6 |
+
*/
|
7 |
+
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Test methods within our PUM_Analytics class
|
11 |
+
*/
|
12 |
+
class PUM_AnalyticsTEST extends WP_UnitTestCase {
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Tests to make sure `track` is valid.
|
16 |
+
*/
|
17 |
+
public function test_track() {
|
18 |
+
|
19 |
+
// Creates our test popup.
|
20 |
+
$popup_id = wp_insert_post(array(
|
21 |
+
'post_type' => 'popup'
|
22 |
+
));
|
23 |
+
|
24 |
+
// Make sure counts are 0.
|
25 |
+
$popup = pum_get_popup( $popup_id );
|
26 |
+
$popup->reset_counts();
|
27 |
+
|
28 |
+
// Tests tracking an open.
|
29 |
+
$open = array(
|
30 |
+
'pid' => $popup_id,
|
31 |
+
'event' => 'open'
|
32 |
+
);
|
33 |
+
PUM_Analytics::track( $open );
|
34 |
+
$new_count = $popup->get_event_count( 'open' );
|
35 |
+
$this->assertEquals( 1, $new_count, 'Open tracking check' );
|
36 |
+
|
37 |
+
// Tests tracking a conversion.
|
38 |
+
$conversion = array(
|
39 |
+
'pid' => $popup_id,
|
40 |
+
'event' => 'conversion'
|
41 |
+
);
|
42 |
+
PUM_Analytics::track( $conversion );
|
43 |
+
$new_count = $popup->get_event_count( 'conversion' );
|
44 |
+
$this->assertEquals( 1, $new_count, 'Conversion tracking check' );
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Tests to make sure data returned from `pum_vars` is valid.
|
49 |
+
*/
|
50 |
+
public function test_pum_vars() {
|
51 |
+
$pum_vars = PUM_Analytics::pum_vars( array() );
|
52 |
+
$this->assertIsArray( $pum_vars );
|
53 |
+
|
54 |
+
$this->assertArrayHasKey( 'analytics_route', $pum_vars );
|
55 |
+
$this->assertArrayHasKey( 'analytics_api', $pum_vars );
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Tests to make sure data returned from `get_analytics_namespace` is valid.
|
60 |
+
*/
|
61 |
+
public function test_get_analytics_namespace() {
|
62 |
+
$namespace = PUM_Analytics::get_analytics_namespace();
|
63 |
+
$this->assertIsString( $namespace );
|
64 |
+
|
65 |
+
$this->assertStringContainsString( '/v1', $namespace );
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Tests to make sure data returned from `get_analytics_route` is valid.
|
70 |
+
*/
|
71 |
+
public function test_get_analytics_route() {
|
72 |
+
$route = PUM_Analytics::get_analytics_route();
|
73 |
+
$this->assertIsString( $route );
|
74 |
+
}
|
75 |
+
}
|
tests/test-pum_admin_onboarding.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Class PUM_Admin_OnboardingTEST
|
4 |
+
*
|
5 |
+
* @package Popup_Maker
|
6 |
+
*/
|
7 |
+
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Test methods within our PUM_Admin_Onboarding class
|
11 |
+
*/
|
12 |
+
class PUM_Admin_OnboardingTEST extends WP_UnitTestCase {
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Tests to make sure data returned from `all_popups_main_tour` is valid.
|
16 |
+
*/
|
17 |
+
public function test_all_popups_pointers() {
|
18 |
+
$pointers = PUM_Admin_Onboarding::all_popups_main_tour( array() );
|
19 |
+
$this->assertIsArray( $pointers );
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Tests to make sure data returned from `tips_alert` is valid.
|
24 |
+
*/
|
25 |
+
public function test_tips_alert() {
|
26 |
+
$alerts = PUM_Admin_Onboarding::tips_alert( array() );
|
27 |
+
$this->assertIsArray( $alerts );
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Tests to make sure data returned from `get_random_tip` is valid.
|
32 |
+
*/
|
33 |
+
public function test_get_random_tip() {
|
34 |
+
$tip = PUM_Admin_Onboarding::get_random_tip();
|
35 |
+
$this->assertIsArray( $tip );
|
36 |
+
|
37 |
+
$this->assertCount( 2, $tip );
|
38 |
+
|
39 |
+
$this->assertArrayHasKey( 'msg', $tip );
|
40 |
+
$this->assertArrayHasKey( 'link', $tip );
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Tests to make sure data returned from `should_show_tip` is valid.
|
45 |
+
*/
|
46 |
+
public function test_should_show_tip() {
|
47 |
+
$result = PUM_Admin_Onboarding::should_show_tip();
|
48 |
+
$this->assertIsBool( $result );
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Tests to make sure data returned from `has_turned_off_tips` is valid.
|
53 |
+
*/
|
54 |
+
public function test_has_turned_off_tips() {
|
55 |
+
$result = PUM_Admin_Onboarding::has_turned_off_tips();
|
56 |
+
$this->assertIsBool( $result );
|
57 |
+
}
|
58 |
+
}
|
tests/test-pum_utils_array.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Class PUM_Utils_ArrayTest
|
4 |
+
*
|
5 |
+
* @package Popup_Maker
|
6 |
+
*/
|
7 |
+
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Test methods within our PUM_Utils_Array class
|
11 |
+
*/
|
12 |
+
class PUM_Utils_ArrayTest extends WP_UnitTestCase {
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Tests to make sure data returned from `filter_null` is valid.
|
16 |
+
*/
|
17 |
+
public function test_filter_null() {
|
18 |
+
$test = [
|
19 |
+
null,
|
20 |
+
'a',
|
21 |
+
1,
|
22 |
+
false,
|
23 |
+
];
|
24 |
+
|
25 |
+
$returned = PUM_Utils_Array::filter_null( $test );
|
26 |
+
|
27 |
+
$this->assertIsArray( $returned );
|
28 |
+
|
29 |
+
$this->assertCount( 3, $returned );
|
30 |
+
}
|
31 |
+
}
|