Changeset 3461881
- Timestamp:
- 02/15/2026 02:48:38 PM (6 weeks ago)
- Location:
- wc-bulk-order-generator
- Files:
-
- 531 added
- 1 deleted
- 10 edited
-
tags/1.4.3 (added)
-
tags/1.4.3/build (added)
-
tags/1.4.3/build/css (added)
-
tags/1.4.3/build/css/generator.min.css (added)
-
tags/1.4.3/build/js (added)
-
tags/1.4.3/build/js/generator.min.js (added)
-
tags/1.4.3/composer.json (added)
-
tags/1.4.3/css (added)
-
tags/1.4.3/css/generator.css (added)
-
tags/1.4.3/images (added)
-
tags/1.4.3/images/wc-1.jpg (added)
-
tags/1.4.3/images/wc-2.jpg (added)
-
tags/1.4.3/images/wc-3.jpg (added)
-
tags/1.4.3/images/wc-4.jpg (added)
-
tags/1.4.3/includes (added)
-
tags/1.4.3/includes/class-bulk-product-Import.php (added)
-
tags/1.4.3/includes/class-bulk-product-export.php (added)
-
tags/1.4.3/includes/class-wc-bulk-delete.php (added)
-
tags/1.4.3/includes/class-wc-bulk-order-export.php (added)
-
tags/1.4.3/includes/class-wc-bulk-order-import.php (added)
-
tags/1.4.3/includes/class-wc-bulk-product-generator.php (added)
-
tags/1.4.3/js (added)
-
tags/1.4.3/js/generator.js (added)
-
tags/1.4.3/languages (added)
-
tags/1.4.3/package.json (added)
-
tags/1.4.3/readme.txt (added)
-
tags/1.4.3/vendor (added)
-
tags/1.4.3/vendor/autoload.php (added)
-
tags/1.4.3/vendor/composer (added)
-
tags/1.4.3/vendor/composer/ClassLoader.php (added)
-
tags/1.4.3/vendor/composer/InstalledVersions.php (added)
-
tags/1.4.3/vendor/composer/LICENSE (added)
-
tags/1.4.3/vendor/composer/autoload_classmap.php (added)
-
tags/1.4.3/vendor/composer/autoload_namespaces.php (added)
-
tags/1.4.3/vendor/composer/autoload_psr4.php (added)
-
tags/1.4.3/vendor/composer/autoload_real.php (added)
-
tags/1.4.3/vendor/composer/autoload_static.php (added)
-
tags/1.4.3/vendor/composer/installed.json (added)
-
tags/1.4.3/vendor/composer/installed.php (added)
-
tags/1.4.3/vendor/freemius (added)
-
tags/1.4.3/vendor/freemius/LICENSE.txt (added)
-
tags/1.4.3/vendor/freemius/README.md (added)
-
tags/1.4.3/vendor/freemius/assets (added)
-
tags/1.4.3/vendor/freemius/assets/css (added)
-
tags/1.4.3/vendor/freemius/assets/css/admin (added)
-
tags/1.4.3/vendor/freemius/assets/css/admin/account.css (added)
-
tags/1.4.3/vendor/freemius/assets/css/admin/add-ons.css (added)
-
tags/1.4.3/vendor/freemius/assets/css/admin/affiliation.css (added)
-
tags/1.4.3/vendor/freemius/assets/css/admin/checkout.css (added)
-
tags/1.4.3/vendor/freemius/assets/css/admin/clone-resolution.css (added)
-
tags/1.4.3/vendor/freemius/assets/css/admin/common.css (added)
-
tags/1.4.3/vendor/freemius/assets/css/admin/connect.css (added)
-
tags/1.4.3/vendor/freemius/assets/css/admin/debug.css (added)
-
tags/1.4.3/vendor/freemius/assets/css/admin/dialog-boxes.css (added)
-
tags/1.4.3/vendor/freemius/assets/css/admin/gdpr-optin-notice.css (added)
-
tags/1.4.3/vendor/freemius/assets/css/admin/index.php (added)
-
tags/1.4.3/vendor/freemius/assets/css/admin/optout.css (added)
-
tags/1.4.3/vendor/freemius/assets/css/admin/plugins.css (added)
-
tags/1.4.3/vendor/freemius/assets/css/customizer.css (added)
-
tags/1.4.3/vendor/freemius/assets/css/index.php (added)
-
tags/1.4.3/vendor/freemius/assets/img (added)
-
tags/1.4.3/vendor/freemius/assets/img/easy-error-log.png (added)
-
tags/1.4.3/vendor/freemius/assets/img/index.php (added)
-
tags/1.4.3/vendor/freemius/assets/img/notifier-to-slack.png (added)
-
tags/1.4.3/vendor/freemius/assets/img/plugin-icon.png (added)
-
tags/1.4.3/vendor/freemius/assets/img/product-display.png (added)
-
tags/1.4.3/vendor/freemius/assets/img/simple-form.gif (added)
-
tags/1.4.3/vendor/freemius/assets/img/theme-icon.png (added)
-
tags/1.4.3/vendor/freemius/assets/img/wc-bulk-order-generator.svg (added)
-
tags/1.4.3/vendor/freemius/assets/index.php (added)
-
tags/1.4.3/vendor/freemius/assets/js (added)
-
tags/1.4.3/vendor/freemius/assets/js/index.php (added)
-
tags/1.4.3/vendor/freemius/assets/js/jquery.form.js (added)
-
tags/1.4.3/vendor/freemius/assets/js/nojquery.ba-postmessage.js (added)
-
tags/1.4.3/vendor/freemius/assets/js/postmessage.js (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/14fb1bd5b7c41648488b06147f50a0dc.svg (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/178afa6030e76635dbe835e111d2c507.png (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/27b5a722a5553d9de0170325267fccec.png (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/4375c4a3ddc6f637c2ab9a2d7220f91e.png (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/4529cac82a2d1f300d3c4702b7b5e8f3.svg (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/45da596e2b512ffc3bb638baaf0fdc4e.png (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/5480ed23b199531a8cbc05924f26952b.png (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/a34e046aee1702a5690679750a7f4d0f.svg (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/b09d0b38b627c2fa564d050f79f2f064.svg (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/b4f3b958f4a019862d81b15f3f8eee3a.svg (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/c03f665db27af43971565560adfba594.png (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/cb5fc4f6ec7ada72e986f6e7dde365bf.png (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/d65812c447b4523b42d59018e1c0bb53.png (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/dd89563360f0272635c8f0ab7d7f1402.png (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/e366d70661d8ad2493bd6afbd779f125.png (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/f18006f6535a1a6e9c6bfbffafe6f18a.svg (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/f3aac72a8e63997d6bb888f816457e9b.png (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/f928f1be99776af83e8e6be4baf8ffe7.svg (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/fde48e4609a6ddc11d639fc2421f2afd.png (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/freemius-pricing.js (added)
-
tags/1.4.3/vendor/freemius/assets/js/pricing/freemius-pricing.js.LICENSE.txt (added)
-
tags/1.4.3/vendor/freemius/composer.json (added)
-
tags/1.4.3/vendor/freemius/config.php (added)
-
tags/1.4.3/vendor/freemius/includes (added)
-
tags/1.4.3/vendor/freemius/includes/class-freemius-abstract.php (added)
-
tags/1.4.3/vendor/freemius/includes/class-freemius.php (added)
-
tags/1.4.3/vendor/freemius/includes/class-fs-admin-notices.php (added)
-
tags/1.4.3/vendor/freemius/includes/class-fs-api.php (added)
-
tags/1.4.3/vendor/freemius/includes/class-fs-garbage-collector.php (added)
-
tags/1.4.3/vendor/freemius/includes/class-fs-hook-snapshot.php (added)
-
tags/1.4.3/vendor/freemius/includes/class-fs-lock.php (added)
-
tags/1.4.3/vendor/freemius/includes/class-fs-logger.php (added)
-
tags/1.4.3/vendor/freemius/includes/class-fs-options.php (added)
-
tags/1.4.3/vendor/freemius/includes/class-fs-plugin-updater.php (added)
-
tags/1.4.3/vendor/freemius/includes/class-fs-security.php (added)
-
tags/1.4.3/vendor/freemius/includes/class-fs-storage.php (added)
-
tags/1.4.3/vendor/freemius/includes/class-fs-user-lock.php (added)
-
tags/1.4.3/vendor/freemius/includes/customizer (added)
-
tags/1.4.3/vendor/freemius/includes/customizer/class-fs-customizer-support-section.php (added)
-
tags/1.4.3/vendor/freemius/includes/customizer/class-fs-customizer-upsell-control.php (added)
-
tags/1.4.3/vendor/freemius/includes/customizer/index.php (added)
-
tags/1.4.3/vendor/freemius/includes/debug (added)
-
tags/1.4.3/vendor/freemius/includes/debug/class-fs-debug-bar-panel.php (added)
-
tags/1.4.3/vendor/freemius/includes/debug/debug-bar-start.php (added)
-
tags/1.4.3/vendor/freemius/includes/debug/index.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-affiliate-terms.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-affiliate.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-billing.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-entity.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-payment.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-plugin-info.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-plugin-license.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-plugin-plan.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-plugin-tag.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-plugin.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-pricing.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-scope-entity.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-site.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-subscription.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/class-fs-user.php (added)
-
tags/1.4.3/vendor/freemius/includes/entities/index.php (added)
-
tags/1.4.3/vendor/freemius/includes/fs-core-functions.php (added)
-
tags/1.4.3/vendor/freemius/includes/fs-essential-functions.php (added)
-
tags/1.4.3/vendor/freemius/includes/fs-html-escaping-functions.php (added)
-
tags/1.4.3/vendor/freemius/includes/fs-plugin-info-dialog.php (added)
-
tags/1.4.3/vendor/freemius/includes/index.php (added)
-
tags/1.4.3/vendor/freemius/includes/l10n.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers (added)
-
tags/1.4.3/vendor/freemius/includes/managers/class-fs-admin-menu-manager.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers/class-fs-admin-notice-manager.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers/class-fs-cache-manager.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers/class-fs-checkout-manager.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers/class-fs-clone-manager.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers/class-fs-contact-form-manager.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers/class-fs-debug-manager.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers/class-fs-gdpr-manager.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers/class-fs-key-value-storage.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers/class-fs-license-manager.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers/class-fs-option-manager.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers/class-fs-permission-manager.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers/class-fs-plan-manager.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers/class-fs-plugin-manager.php (added)
-
tags/1.4.3/vendor/freemius/includes/managers/index.php (added)
-
tags/1.4.3/vendor/freemius/includes/sdk (added)
-
tags/1.4.3/vendor/freemius/includes/sdk/Exceptions (added)
-
tags/1.4.3/vendor/freemius/includes/sdk/Exceptions/ArgumentNotExistException.php (added)
-
tags/1.4.3/vendor/freemius/includes/sdk/Exceptions/EmptyArgumentException.php (added)
-
tags/1.4.3/vendor/freemius/includes/sdk/Exceptions/Exception.php (added)
-
tags/1.4.3/vendor/freemius/includes/sdk/Exceptions/InvalidArgumentException.php (added)
-
tags/1.4.3/vendor/freemius/includes/sdk/Exceptions/OAuthException.php (added)
-
tags/1.4.3/vendor/freemius/includes/sdk/Exceptions/index.php (added)
-
tags/1.4.3/vendor/freemius/includes/sdk/FreemiusBase.php (added)
-
tags/1.4.3/vendor/freemius/includes/sdk/FreemiusWordPress.php (added)
-
tags/1.4.3/vendor/freemius/includes/sdk/LICENSE.txt (added)
-
tags/1.4.3/vendor/freemius/includes/sdk/index.php (added)
-
tags/1.4.3/vendor/freemius/includes/supplements (added)
-
tags/1.4.3/vendor/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php (added)
-
tags/1.4.3/vendor/freemius/includes/supplements/fs-essential-functions-2.2.1.php (added)
-
tags/1.4.3/vendor/freemius/includes/supplements/fs-migration-2.5.1.php (added)
-
tags/1.4.3/vendor/freemius/includes/supplements/index.php (added)
-
tags/1.4.3/vendor/freemius/index.php (added)
-
tags/1.4.3/vendor/freemius/languages (added)
-
tags/1.4.3/vendor/freemius/languages/freemius-cs_CZ.mo (added)
-
tags/1.4.3/vendor/freemius/languages/freemius-da_DK.mo (added)
-
tags/1.4.3/vendor/freemius/languages/freemius-de_DE.mo (added)
-
tags/1.4.3/vendor/freemius/languages/freemius-es_ES.mo (added)
-
tags/1.4.3/vendor/freemius/languages/freemius-fr_FR.mo (added)
-
tags/1.4.3/vendor/freemius/languages/freemius-he_IL.mo (added)
-
tags/1.4.3/vendor/freemius/languages/freemius-hu_HU.mo (added)
-
tags/1.4.3/vendor/freemius/languages/freemius-it_IT.mo (added)
-
tags/1.4.3/vendor/freemius/languages/freemius-ja.mo (added)
-
tags/1.4.3/vendor/freemius/languages/freemius-nl_NL.mo (added)
-
tags/1.4.3/vendor/freemius/languages/freemius-ru_RU.mo (added)
-
tags/1.4.3/vendor/freemius/languages/freemius-ta.mo (added)
-
tags/1.4.3/vendor/freemius/languages/freemius-zh_CN.mo (added)
-
tags/1.4.3/vendor/freemius/languages/freemius.pot (added)
-
tags/1.4.3/vendor/freemius/languages/index.php (added)
-
tags/1.4.3/vendor/freemius/require.php (added)
-
tags/1.4.3/vendor/freemius/start.php (added)
-
tags/1.4.3/vendor/freemius/templates (added)
-
tags/1.4.3/vendor/freemius/templates/account (added)
-
tags/1.4.3/vendor/freemius/templates/account.php (added)
-
tags/1.4.3/vendor/freemius/templates/account/billing.php (added)
-
tags/1.4.3/vendor/freemius/templates/account/index.php (added)
-
tags/1.4.3/vendor/freemius/templates/account/partials (added)
-
tags/1.4.3/vendor/freemius/templates/account/partials/activate-license-button.php (added)
-
tags/1.4.3/vendor/freemius/templates/account/partials/addon.php (added)
-
tags/1.4.3/vendor/freemius/templates/account/partials/deactivate-license-button.php (added)
-
tags/1.4.3/vendor/freemius/templates/account/partials/disconnect-button.php (added)
-
tags/1.4.3/vendor/freemius/templates/account/partials/index.php (added)
-
tags/1.4.3/vendor/freemius/templates/account/partials/site.php (added)
-
tags/1.4.3/vendor/freemius/templates/account/payments.php (added)
-
tags/1.4.3/vendor/freemius/templates/add-ons.php (added)
-
tags/1.4.3/vendor/freemius/templates/add-trial-to-pricing.php (added)
-
tags/1.4.3/vendor/freemius/templates/admin-notice.php (added)
-
tags/1.4.3/vendor/freemius/templates/ajax-loader.php (added)
-
tags/1.4.3/vendor/freemius/templates/api-connectivity-message-js.php (added)
-
tags/1.4.3/vendor/freemius/templates/auto-installation.php (added)
-
tags/1.4.3/vendor/freemius/templates/checkout (added)
-
tags/1.4.3/vendor/freemius/templates/checkout.php (added)
-
tags/1.4.3/vendor/freemius/templates/checkout/frame.php (added)
-
tags/1.4.3/vendor/freemius/templates/checkout/process-redirect.php (added)
-
tags/1.4.3/vendor/freemius/templates/checkout/redirect.php (added)
-
tags/1.4.3/vendor/freemius/templates/clone-resolution-js.php (added)
-
tags/1.4.3/vendor/freemius/templates/connect (added)
-
tags/1.4.3/vendor/freemius/templates/connect.php (added)
-
tags/1.4.3/vendor/freemius/templates/connect/index.php (added)
-
tags/1.4.3/vendor/freemius/templates/connect/permission.php (added)
-
tags/1.4.3/vendor/freemius/templates/connect/permissions-group.php (added)
-
tags/1.4.3/vendor/freemius/templates/contact.php (added)
-
tags/1.4.3/vendor/freemius/templates/debug (added)
-
tags/1.4.3/vendor/freemius/templates/debug.php (added)
-
tags/1.4.3/vendor/freemius/templates/debug/api-calls.php (added)
-
tags/1.4.3/vendor/freemius/templates/debug/index.php (added)
-
tags/1.4.3/vendor/freemius/templates/debug/logger.php (added)
-
tags/1.4.3/vendor/freemius/templates/debug/plugins-themes-sync.php (added)
-
tags/1.4.3/vendor/freemius/templates/debug/scheduled-crons.php (added)
-
tags/1.4.3/vendor/freemius/templates/email.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms (added)
-
tags/1.4.3/vendor/freemius/templates/forms/affiliation.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/data-debug-mode.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/deactivation (added)
-
tags/1.4.3/vendor/freemius/templates/forms/deactivation/contact.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/deactivation/form.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/deactivation/index.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/deactivation/retry-skip.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/email-address-update.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/index.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/license-activation.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/optout.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/premium-versions-upgrade-handler.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/premium-versions-upgrade-metadata.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/resend-key.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/subscription-cancellation.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/trial-start.php (added)
-
tags/1.4.3/vendor/freemius/templates/forms/user-change.php (added)
-
tags/1.4.3/vendor/freemius/templates/gdpr-optin-js.php (added)
-
tags/1.4.3/vendor/freemius/templates/index.php (added)
-
tags/1.4.3/vendor/freemius/templates/js (added)
-
tags/1.4.3/vendor/freemius/templates/js/index.php (added)
-
tags/1.4.3/vendor/freemius/templates/js/jquery.content-change.php (added)
-
tags/1.4.3/vendor/freemius/templates/js/open-license-activation.php (added)
-
tags/1.4.3/vendor/freemius/templates/js/permissions.php (added)
-
tags/1.4.3/vendor/freemius/templates/js/style-premium-theme.php (added)
-
tags/1.4.3/vendor/freemius/templates/partials (added)
-
tags/1.4.3/vendor/freemius/templates/partials/index.php (added)
-
tags/1.4.3/vendor/freemius/templates/partials/network-activation.php (added)
-
tags/1.4.3/vendor/freemius/templates/plugin-icon.php (added)
-
tags/1.4.3/vendor/freemius/templates/plugin-info (added)
-
tags/1.4.3/vendor/freemius/templates/plugin-info/description.php (added)
-
tags/1.4.3/vendor/freemius/templates/plugin-info/features.php (added)
-
tags/1.4.3/vendor/freemius/templates/plugin-info/index.php (added)
-
tags/1.4.3/vendor/freemius/templates/plugin-info/screenshots.php (added)
-
tags/1.4.3/vendor/freemius/templates/pricing.php (added)
-
tags/1.4.3/vendor/freemius/templates/secure-https-header.php (added)
-
tags/1.4.3/vendor/freemius/templates/sticky-admin-notice-js.php (added)
-
tags/1.4.3/vendor/freemius/templates/tabs-capture-js.php (added)
-
tags/1.4.3/vendor/freemius/templates/tabs.php (added)
-
tags/1.4.3/wc-bulk-order-generator.php (added)
-
trunk/build/js/generator.min.js (modified) (1 diff)
-
trunk/composer.json (added)
-
trunk/freemius (deleted)
-
trunk/images (added)
-
trunk/images/wc-1.jpg (added)
-
trunk/images/wc-2.jpg (added)
-
trunk/images/wc-3.jpg (added)
-
trunk/images/wc-4.jpg (added)
-
trunk/includes/class-bulk-product-Import.php (modified) (4 diffs)
-
trunk/includes/class-bulk-product-export.php (modified) (6 diffs)
-
trunk/includes/class-wc-bulk-delete.php (modified) (3 diffs)
-
trunk/includes/class-wc-bulk-order-export.php (modified) (5 diffs)
-
trunk/includes/class-wc-bulk-order-import.php (modified) (7 diffs)
-
trunk/includes/class-wc-bulk-product-generator.php (modified) (13 diffs)
-
trunk/js/generator.js (modified) (3 diffs)
-
trunk/readme.txt (modified) (3 diffs)
-
trunk/vendor (added)
-
trunk/vendor/autoload.php (added)
-
trunk/vendor/composer (added)
-
trunk/vendor/composer/ClassLoader.php (added)
-
trunk/vendor/composer/InstalledVersions.php (added)
-
trunk/vendor/composer/LICENSE (added)
-
trunk/vendor/composer/autoload_classmap.php (added)
-
trunk/vendor/composer/autoload_namespaces.php (added)
-
trunk/vendor/composer/autoload_psr4.php (added)
-
trunk/vendor/composer/autoload_real.php (added)
-
trunk/vendor/composer/autoload_static.php (added)
-
trunk/vendor/composer/installed.json (added)
-
trunk/vendor/composer/installed.php (added)
-
trunk/vendor/freemius (added)
-
trunk/vendor/freemius/LICENSE.txt (added)
-
trunk/vendor/freemius/README.md (added)
-
trunk/vendor/freemius/assets (added)
-
trunk/vendor/freemius/assets/css (added)
-
trunk/vendor/freemius/assets/css/admin (added)
-
trunk/vendor/freemius/assets/css/admin/account.css (added)
-
trunk/vendor/freemius/assets/css/admin/add-ons.css (added)
-
trunk/vendor/freemius/assets/css/admin/affiliation.css (added)
-
trunk/vendor/freemius/assets/css/admin/checkout.css (added)
-
trunk/vendor/freemius/assets/css/admin/clone-resolution.css (added)
-
trunk/vendor/freemius/assets/css/admin/common.css (added)
-
trunk/vendor/freemius/assets/css/admin/connect.css (added)
-
trunk/vendor/freemius/assets/css/admin/debug.css (added)
-
trunk/vendor/freemius/assets/css/admin/dialog-boxes.css (added)
-
trunk/vendor/freemius/assets/css/admin/gdpr-optin-notice.css (added)
-
trunk/vendor/freemius/assets/css/admin/index.php (added)
-
trunk/vendor/freemius/assets/css/admin/optout.css (added)
-
trunk/vendor/freemius/assets/css/admin/plugins.css (added)
-
trunk/vendor/freemius/assets/css/customizer.css (added)
-
trunk/vendor/freemius/assets/css/index.php (added)
-
trunk/vendor/freemius/assets/img (added)
-
trunk/vendor/freemius/assets/img/easy-error-log.png (added)
-
trunk/vendor/freemius/assets/img/index.php (added)
-
trunk/vendor/freemius/assets/img/notifier-to-slack.png (added)
-
trunk/vendor/freemius/assets/img/plugin-icon.png (added)
-
trunk/vendor/freemius/assets/img/product-display.png (added)
-
trunk/vendor/freemius/assets/img/simple-form.gif (added)
-
trunk/vendor/freemius/assets/img/theme-icon.png (added)
-
trunk/vendor/freemius/assets/img/wc-bulk-order-generator.svg (added)
-
trunk/vendor/freemius/assets/index.php (added)
-
trunk/vendor/freemius/assets/js (added)
-
trunk/vendor/freemius/assets/js/index.php (added)
-
trunk/vendor/freemius/assets/js/jquery.form.js (added)
-
trunk/vendor/freemius/assets/js/nojquery.ba-postmessage.js (added)
-
trunk/vendor/freemius/assets/js/postmessage.js (added)
-
trunk/vendor/freemius/assets/js/pricing (added)
-
trunk/vendor/freemius/assets/js/pricing/14fb1bd5b7c41648488b06147f50a0dc.svg (added)
-
trunk/vendor/freemius/assets/js/pricing/178afa6030e76635dbe835e111d2c507.png (added)
-
trunk/vendor/freemius/assets/js/pricing/27b5a722a5553d9de0170325267fccec.png (added)
-
trunk/vendor/freemius/assets/js/pricing/4375c4a3ddc6f637c2ab9a2d7220f91e.png (added)
-
trunk/vendor/freemius/assets/js/pricing/4529cac82a2d1f300d3c4702b7b5e8f3.svg (added)
-
trunk/vendor/freemius/assets/js/pricing/45da596e2b512ffc3bb638baaf0fdc4e.png (added)
-
trunk/vendor/freemius/assets/js/pricing/5480ed23b199531a8cbc05924f26952b.png (added)
-
trunk/vendor/freemius/assets/js/pricing/a34e046aee1702a5690679750a7f4d0f.svg (added)
-
trunk/vendor/freemius/assets/js/pricing/b09d0b38b627c2fa564d050f79f2f064.svg (added)
-
trunk/vendor/freemius/assets/js/pricing/b4f3b958f4a019862d81b15f3f8eee3a.svg (added)
-
trunk/vendor/freemius/assets/js/pricing/c03f665db27af43971565560adfba594.png (added)
-
trunk/vendor/freemius/assets/js/pricing/cb5fc4f6ec7ada72e986f6e7dde365bf.png (added)
-
trunk/vendor/freemius/assets/js/pricing/d65812c447b4523b42d59018e1c0bb53.png (added)
-
trunk/vendor/freemius/assets/js/pricing/dd89563360f0272635c8f0ab7d7f1402.png (added)
-
trunk/vendor/freemius/assets/js/pricing/e366d70661d8ad2493bd6afbd779f125.png (added)
-
trunk/vendor/freemius/assets/js/pricing/f18006f6535a1a6e9c6bfbffafe6f18a.svg (added)
-
trunk/vendor/freemius/assets/js/pricing/f3aac72a8e63997d6bb888f816457e9b.png (added)
-
trunk/vendor/freemius/assets/js/pricing/f928f1be99776af83e8e6be4baf8ffe7.svg (added)
-
trunk/vendor/freemius/assets/js/pricing/fde48e4609a6ddc11d639fc2421f2afd.png (added)
-
trunk/vendor/freemius/assets/js/pricing/freemius-pricing.js (added)
-
trunk/vendor/freemius/assets/js/pricing/freemius-pricing.js.LICENSE.txt (added)
-
trunk/vendor/freemius/composer.json (added)
-
trunk/vendor/freemius/config.php (added)
-
trunk/vendor/freemius/includes (added)
-
trunk/vendor/freemius/includes/class-freemius-abstract.php (added)
-
trunk/vendor/freemius/includes/class-freemius.php (added)
-
trunk/vendor/freemius/includes/class-fs-admin-notices.php (added)
-
trunk/vendor/freemius/includes/class-fs-api.php (added)
-
trunk/vendor/freemius/includes/class-fs-garbage-collector.php (added)
-
trunk/vendor/freemius/includes/class-fs-hook-snapshot.php (added)
-
trunk/vendor/freemius/includes/class-fs-lock.php (added)
-
trunk/vendor/freemius/includes/class-fs-logger.php (added)
-
trunk/vendor/freemius/includes/class-fs-options.php (added)
-
trunk/vendor/freemius/includes/class-fs-plugin-updater.php (added)
-
trunk/vendor/freemius/includes/class-fs-security.php (added)
-
trunk/vendor/freemius/includes/class-fs-storage.php (added)
-
trunk/vendor/freemius/includes/class-fs-user-lock.php (added)
-
trunk/vendor/freemius/includes/customizer (added)
-
trunk/vendor/freemius/includes/customizer/class-fs-customizer-support-section.php (added)
-
trunk/vendor/freemius/includes/customizer/class-fs-customizer-upsell-control.php (added)
-
trunk/vendor/freemius/includes/customizer/index.php (added)
-
trunk/vendor/freemius/includes/debug (added)
-
trunk/vendor/freemius/includes/debug/class-fs-debug-bar-panel.php (added)
-
trunk/vendor/freemius/includes/debug/debug-bar-start.php (added)
-
trunk/vendor/freemius/includes/debug/index.php (added)
-
trunk/vendor/freemius/includes/entities (added)
-
trunk/vendor/freemius/includes/entities/class-fs-affiliate-terms.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-affiliate.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-billing.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-entity.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-payment.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-plugin-info.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-plugin-license.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-plugin-plan.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-plugin-tag.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-plugin.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-pricing.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-scope-entity.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-site.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-subscription.php (added)
-
trunk/vendor/freemius/includes/entities/class-fs-user.php (added)
-
trunk/vendor/freemius/includes/entities/index.php (added)
-
trunk/vendor/freemius/includes/fs-core-functions.php (added)
-
trunk/vendor/freemius/includes/fs-essential-functions.php (added)
-
trunk/vendor/freemius/includes/fs-html-escaping-functions.php (added)
-
trunk/vendor/freemius/includes/fs-plugin-info-dialog.php (added)
-
trunk/vendor/freemius/includes/index.php (added)
-
trunk/vendor/freemius/includes/l10n.php (added)
-
trunk/vendor/freemius/includes/managers (added)
-
trunk/vendor/freemius/includes/managers/class-fs-admin-menu-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-admin-notice-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-cache-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-checkout-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-clone-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-contact-form-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-debug-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-gdpr-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-key-value-storage.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-license-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-option-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-permission-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-plan-manager.php (added)
-
trunk/vendor/freemius/includes/managers/class-fs-plugin-manager.php (added)
-
trunk/vendor/freemius/includes/managers/index.php (added)
-
trunk/vendor/freemius/includes/sdk (added)
-
trunk/vendor/freemius/includes/sdk/Exceptions (added)
-
trunk/vendor/freemius/includes/sdk/Exceptions/ArgumentNotExistException.php (added)
-
trunk/vendor/freemius/includes/sdk/Exceptions/EmptyArgumentException.php (added)
-
trunk/vendor/freemius/includes/sdk/Exceptions/Exception.php (added)
-
trunk/vendor/freemius/includes/sdk/Exceptions/InvalidArgumentException.php (added)
-
trunk/vendor/freemius/includes/sdk/Exceptions/OAuthException.php (added)
-
trunk/vendor/freemius/includes/sdk/Exceptions/index.php (added)
-
trunk/vendor/freemius/includes/sdk/FreemiusBase.php (added)
-
trunk/vendor/freemius/includes/sdk/FreemiusWordPress.php (added)
-
trunk/vendor/freemius/includes/sdk/LICENSE.txt (added)
-
trunk/vendor/freemius/includes/sdk/index.php (added)
-
trunk/vendor/freemius/includes/supplements (added)
-
trunk/vendor/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php (added)
-
trunk/vendor/freemius/includes/supplements/fs-essential-functions-2.2.1.php (added)
-
trunk/vendor/freemius/includes/supplements/fs-migration-2.5.1.php (added)
-
trunk/vendor/freemius/includes/supplements/index.php (added)
-
trunk/vendor/freemius/index.php (added)
-
trunk/vendor/freemius/languages (added)
-
trunk/vendor/freemius/languages/freemius-cs_CZ.mo (added)
-
trunk/vendor/freemius/languages/freemius-da_DK.mo (added)
-
trunk/vendor/freemius/languages/freemius-de_DE.mo (added)
-
trunk/vendor/freemius/languages/freemius-es_ES.mo (added)
-
trunk/vendor/freemius/languages/freemius-fr_FR.mo (added)
-
trunk/vendor/freemius/languages/freemius-he_IL.mo (added)
-
trunk/vendor/freemius/languages/freemius-hu_HU.mo (added)
-
trunk/vendor/freemius/languages/freemius-it_IT.mo (added)
-
trunk/vendor/freemius/languages/freemius-ja.mo (added)
-
trunk/vendor/freemius/languages/freemius-nl_NL.mo (added)
-
trunk/vendor/freemius/languages/freemius-ru_RU.mo (added)
-
trunk/vendor/freemius/languages/freemius-ta.mo (added)
-
trunk/vendor/freemius/languages/freemius-zh_CN.mo (added)
-
trunk/vendor/freemius/languages/freemius.pot (added)
-
trunk/vendor/freemius/languages/index.php (added)
-
trunk/vendor/freemius/require.php (added)
-
trunk/vendor/freemius/start.php (added)
-
trunk/vendor/freemius/templates (added)
-
trunk/vendor/freemius/templates/account (added)
-
trunk/vendor/freemius/templates/account.php (added)
-
trunk/vendor/freemius/templates/account/billing.php (added)
-
trunk/vendor/freemius/templates/account/index.php (added)
-
trunk/vendor/freemius/templates/account/partials (added)
-
trunk/vendor/freemius/templates/account/partials/activate-license-button.php (added)
-
trunk/vendor/freemius/templates/account/partials/addon.php (added)
-
trunk/vendor/freemius/templates/account/partials/deactivate-license-button.php (added)
-
trunk/vendor/freemius/templates/account/partials/disconnect-button.php (added)
-
trunk/vendor/freemius/templates/account/partials/index.php (added)
-
trunk/vendor/freemius/templates/account/partials/site.php (added)
-
trunk/vendor/freemius/templates/account/payments.php (added)
-
trunk/vendor/freemius/templates/add-ons.php (added)
-
trunk/vendor/freemius/templates/add-trial-to-pricing.php (added)
-
trunk/vendor/freemius/templates/admin-notice.php (added)
-
trunk/vendor/freemius/templates/ajax-loader.php (added)
-
trunk/vendor/freemius/templates/api-connectivity-message-js.php (added)
-
trunk/vendor/freemius/templates/auto-installation.php (added)
-
trunk/vendor/freemius/templates/checkout (added)
-
trunk/vendor/freemius/templates/checkout.php (added)
-
trunk/vendor/freemius/templates/checkout/frame.php (added)
-
trunk/vendor/freemius/templates/checkout/process-redirect.php (added)
-
trunk/vendor/freemius/templates/checkout/redirect.php (added)
-
trunk/vendor/freemius/templates/clone-resolution-js.php (added)
-
trunk/vendor/freemius/templates/connect (added)
-
trunk/vendor/freemius/templates/connect.php (added)
-
trunk/vendor/freemius/templates/connect/index.php (added)
-
trunk/vendor/freemius/templates/connect/permission.php (added)
-
trunk/vendor/freemius/templates/connect/permissions-group.php (added)
-
trunk/vendor/freemius/templates/contact.php (added)
-
trunk/vendor/freemius/templates/debug (added)
-
trunk/vendor/freemius/templates/debug.php (added)
-
trunk/vendor/freemius/templates/debug/api-calls.php (added)
-
trunk/vendor/freemius/templates/debug/index.php (added)
-
trunk/vendor/freemius/templates/debug/logger.php (added)
-
trunk/vendor/freemius/templates/debug/plugins-themes-sync.php (added)
-
trunk/vendor/freemius/templates/debug/scheduled-crons.php (added)
-
trunk/vendor/freemius/templates/email.php (added)
-
trunk/vendor/freemius/templates/forms (added)
-
trunk/vendor/freemius/templates/forms/affiliation.php (added)
-
trunk/vendor/freemius/templates/forms/data-debug-mode.php (added)
-
trunk/vendor/freemius/templates/forms/deactivation (added)
-
trunk/vendor/freemius/templates/forms/deactivation/contact.php (added)
-
trunk/vendor/freemius/templates/forms/deactivation/form.php (added)
-
trunk/vendor/freemius/templates/forms/deactivation/index.php (added)
-
trunk/vendor/freemius/templates/forms/deactivation/retry-skip.php (added)
-
trunk/vendor/freemius/templates/forms/email-address-update.php (added)
-
trunk/vendor/freemius/templates/forms/index.php (added)
-
trunk/vendor/freemius/templates/forms/license-activation.php (added)
-
trunk/vendor/freemius/templates/forms/optout.php (added)
-
trunk/vendor/freemius/templates/forms/premium-versions-upgrade-handler.php (added)
-
trunk/vendor/freemius/templates/forms/premium-versions-upgrade-metadata.php (added)
-
trunk/vendor/freemius/templates/forms/resend-key.php (added)
-
trunk/vendor/freemius/templates/forms/subscription-cancellation.php (added)
-
trunk/vendor/freemius/templates/forms/trial-start.php (added)
-
trunk/vendor/freemius/templates/forms/user-change.php (added)
-
trunk/vendor/freemius/templates/gdpr-optin-js.php (added)
-
trunk/vendor/freemius/templates/index.php (added)
-
trunk/vendor/freemius/templates/js (added)
-
trunk/vendor/freemius/templates/js/index.php (added)
-
trunk/vendor/freemius/templates/js/jquery.content-change.php (added)
-
trunk/vendor/freemius/templates/js/open-license-activation.php (added)
-
trunk/vendor/freemius/templates/js/permissions.php (added)
-
trunk/vendor/freemius/templates/js/style-premium-theme.php (added)
-
trunk/vendor/freemius/templates/partials (added)
-
trunk/vendor/freemius/templates/partials/index.php (added)
-
trunk/vendor/freemius/templates/partials/network-activation.php (added)
-
trunk/vendor/freemius/templates/plugin-icon.php (added)
-
trunk/vendor/freemius/templates/plugin-info (added)
-
trunk/vendor/freemius/templates/plugin-info/description.php (added)
-
trunk/vendor/freemius/templates/plugin-info/features.php (added)
-
trunk/vendor/freemius/templates/plugin-info/index.php (added)
-
trunk/vendor/freemius/templates/plugin-info/screenshots.php (added)
-
trunk/vendor/freemius/templates/pricing.php (added)
-
trunk/vendor/freemius/templates/secure-https-header.php (added)
-
trunk/vendor/freemius/templates/sticky-admin-notice-js.php (added)
-
trunk/vendor/freemius/templates/tabs-capture-js.php (added)
-
trunk/vendor/freemius/templates/tabs.php (added)
-
trunk/wc-bulk-order-generator.php (modified) (20 diffs)
Legend:
- Unmodified
- Added
- Removed
-
wc-bulk-order-generator/trunk/build/js/generator.min.js
r3315024 r3461881 1 jQuery(document).ready((function(t){var e=localStorage.getItem("activeTab");e?(t(".nav-tab").removeClass("nav-tab-active"),t(".tab-content").removeClass("active"),t('.nav-tab[href="'.concat(e,'"]')).addClass("nav-tab-active"),t(e).addClass("active")):(t(".nav-tab").first().addClass("nav-tab-active"),t(".tab-content").first().addClass("active")),t(".nav-tab").on("click",(function(e){e.preventDefault(),t(".nav-tab").removeClass("nav-tab-active"),t(this).addClass("nav-tab-active"),t(".tab-content").removeClass("active"),t(t(this).attr("href")).addClass("active"),localStorage.setItem("activeTab",t(this).attr("href"))}))})),jQuery(document).ready((function(t){function e(e){var o=t('\n <div class="wc-toast '.concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",'">\n ').concat(e,"\n </div>\n "));t("#toast-container").append(o),setTimeout((function(){return o.css("opacity","1")}),10),setTimeout((function(){o.css("opacity","0"),setTimeout((function(){return o.remove()}),300)}),3e3)}t("#toast-container").length||t("body").append('<div id="toast-container" style="position: fixed; top: 40px; right: 20px; z-index: 10000;"></div>');var o,r=!1,n=0,a=0,c=0,s=0,i=!1;function d(t){var e=Math.floor(t/1e3),o=Math.floor(e/60),r=Math.floor(o/60);return"".concat(r,"h ").concat(o%60,"m ").concat(e%60,"s")}function p(){var e=a+c,r=e/n*100;t(".progress-bar").css("width",r+"%"),t("#total-processed").text(e),t("#success-count").text(a),t("#failed-count").text(c);var s=e/((Date.now()-o)/1e3);t("#processing-rate").text(s.toFixed(2));var i=(n-e)/s;t("#time-remaining").text(d(1e3*i)),t("#elapsed-time").text(d(Date.now()-o))}function u(){if(!r||i)return l("Order Generation stopped","warning"),void e("Order Generation stopped","warning");var o=n-(a+c);if(o<=0)return l("Order Generation complete!","success"),void e("Order Generation complete!","success");var d=Math.min(t("#batch_size").val(),o);t("#generation-status").text("Processing batch ".concat(s+1,"...")).removeClass().addClass("notice notice-info").show(),t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"process_order_batch",nonce:wcOrderGenerator.nonce,batch_size:d,batch_number:s},success:function(t){t.success?(a+=t.data.success,c+=t.data.failed,s++,p(),i?(l("Generation stopped","warning"),e("Order Generation stopped","warning")):setTimeout(u,500)):(f("Error processing batch: "+t.data),e("Eror processing batch","error"))},error:function(t,o,r){i?(l("Generation stopped","warning"),e("Order Generation stopped","warning")):(f("Server error occurred: "+r),e("Server error occurred","error"))}})}function l(e,o){t("#generation-status").text(e).removeClass().addClass("notice notice-".concat(o)).show(),r=!1,i=!1,t("#start-generation").prop("disabled",!1),t("#stop-generation").prop("disabled",!0),t("#reset-generation").show()}function f(e){c+=0,p(),t("#time-remaining").text(d(c)),l(e,"error")}t("#order-generator-form").on("submit",(function(e){e.preventDefault();var d=parseInt(t("#num_orders").val());if(d<1||d>1e4)alert("Please enter a number between 1 and 10k");else{var p=parseInt(t("#batch_size").val());p<5||p>30?alert("Please enter a batch number between 5 and 30"):(r=!0,i=!1,n=d,a=0,c=0,s=0,o=Date.now(),t("#start-generation").prop("disabled",!0),t("#stop-generation").prop("disabled",!1),t("#reset-generation").hide(),t("#generation-status").text("Starting generation...").removeClass().addClass("notice notice-info").show(),t(".progress-bar").css("width","0%"),u())}})),t("#stop-generation").on("click",(function(){r&&(i=!0,t(this).prop("disabled",!0),t("#generation-status").text("Stopping generation...").removeClass().addClass("notice notice-warning").show(),t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"stop_order_generation",nonce:wcOrderGenerator.nonce}}).fail((function(t,e,o){})))})),t("#reset-generation").on("click",(function(){r=!1,i=!1,n=0,a=0,c=0,s=0,t(".progress-bar").css("width","0%"),t("#total-processed").text("0"),t("#success-count").text("0"),t("#failed-count").text("0"),t("#processing-rate").text("0"),t("#elapsed-time").text("0s"),t("#time-remaining").text("--"),t("#num_orders").val("100"),t("#start-generation").prop("disabled",!1),t("#stop-generation").prop("disabled",!0),t("#reset-generation").hide(),t("#generation-status").hide()}))})),jQuery(document).ready((function(t){function e(e){var o=t('\n <div class="wc-toast '.concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",'">\n ').concat(e,"\n </div>\n "));t("#toast-container").append(o),setTimeout((function(){return o.css("opacity","1")}),10),setTimeout((function(){o.css("opacity","0"),setTimeout((function(){return o.remove()}),300)}),3e3)}t("#toast-container").length||t("body").append('<div id="toast-container" style="position: fixed; top: 40px; right: 20px; z-index: 10000;"></div>');var o=!1,r=0,n=0,a=0,c=0;function s(){var e=(n+a)/r*100;t(".product-progress-bar").css("width",e+"%"),t("#products-processed").text(n),t("#products-failed").text(a)}function i(){if(!o)return t("#product-generation-status").text("Generation stopped").removeClass().addClass("notice notice-warning").show(), t("#start-product-generation").prop("disabled",!1),t("#stop-product-generation").prop("disabled",!0),t("#reset-product-generation").show(),void e("Product Generation stopped","warning");var p=r-(n+a);if(p<=0)return t("#product-generation-status").text("Product generation complete!").removeClass().addClass("notice notice-success").show(),t("#start-product-generation").prop("disabled",!1),t("#stop-product-generation").prop("disabled",!0),t("#reset-product-generation").show(),void e("Product Generation complete!","success");var u=Math.min(t("#product_batch_size").val(),p);t("#product-generation-status").text("Processing product batch ".concat(c+1,"...")).removeClass().addClass("notice notice-info").show(),t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"process_product_batch",nonce:wcOrderGenerator.products_nonce,batch_size:u,price_min:t("#price_min").val(),price_max:t("#price_max").val(),batch_number:c,product_types:window.selectedProductTypes},success:function(t){t.success?(n+=t.data.success,a+=t.data.failed,c++,s(),setTimeout(i,500)):d("Error processing product batch: "+t.data)},error:function(){d("Server error occurred during product generation")}})}function d(e){a+=parseInt(t("#product_batch_size").val()),s(),t("#product-generation-status").text(e).removeClass().addClass("notice notice-error").show(),o=!1,t("#start-product-generation").prop("disabled",!1),t("#stop-product-generation").prop("disabled",!0),t("#reset-product-generation").show()}t("#product-generator-form").on("submit",(function(e){e.preventDefault();var s=parseInt(t("#num_products").val());if(s<1||s>1e4)alert("Please enter a number between 1 and 10k");else{var d=parseInt(t("#product_batch_size").val());if(d<5||d>30)alert("Please enter a batch number between 5 and 30");else{var p=[];t('#product-generator-form input[name="product_types[]"]:checked').each((function(){p.push(t(this).val())})),0!==p.length?(o=!0,r=s,n=0,a=0,c=0,Date.now(),t("#start-product-generation").prop("disabled",!0),t("#stop-product-generation").prop("disabled",!1),t("#reset-product-generation").hide(),t("#product-generation-status").text("Starting product generation...").removeClass().addClass("notice notice-info").show(),t(".product-progress-bar").css("width","0%"),window.selectedProductTypes=p,i()):alert("Please select at least one product type.")}}})),t("#stop-product-generation").on("click",(function(){o=!1,t(this).prop("disabled",!0),t("#product-generation-status").text("Stopping product generation...").removeClass().addClass("notice notice-warning").show()})),t("#reset-product-generation").on("click",(function(){o=!1,r=0,n=0,a=0,c=0,t(".product-progress-bar").css("width","0%"),t("#products-processed").text("0"),t("#products-failed").text("0"),t("#start-product-generation").prop("disabled",!1),t("#stop-product-generation").prop("disabled",!0),t("#reset-product-generation").hide(),t("#product-generation-status").hide()}))})),jQuery(document).ready((function(t){function e(e){var o=t('\n <div class="wc-toast '.concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",'">\n ').concat(e,"\n </div>\n "));t("#toast-container").append(o),setTimeout((function(){return o.css("opacity","1")}),10),setTimeout((function(){o.css("opacity","0"),setTimeout((function(){return o.remove()}),300)}),3e3)}t("#toast-container").length||t("body").append('<div id="toast-container" style="position: fixed; top: 40px; right: 20px; z-index: 10000;"></div>');var o=0,r=0;function n(c,s){var i=parseInt(t("#export-batch-size").val()),d=t("#export-status").val()||[],p=Math.ceil(o/i);t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"export_order_batch",nonce:wcOrderGenerator.export_nonce,batch_size:i,batch_number:c,total_batches:p,export_all:!0,statuses:d,export_session:s},success:function(d){if(d.success){var p=(c+1)*i;!function(n,c,s){if(!o||o<=0)e("Exporting number of order not found!","info");else{var i=Math.min(n/o*100,100);t(".export-progress-bar").css({width:i+"%","background-color":"blue",height:"25px",transition:"width 0.5s ease-in-out"}),t("#export-total-processed").text(n),t("#export-success-count").text(c),t("#export-failed-count").text(s);var d=Date.now(),p=r?d-r:0;t("#export-elapsed-time").text(p>0?a(p):"0s");var u=p>0?n/(p/1e3):0,l=o-n,f=u>0?l/u:0;t("#export-time-remaining").text(f>0?a(1e3*f):"0s")}}(Math.min(p,o),d.data.success,d.data.failed),d.data.is_last_batch?(t("#start-order-export").prop("disabled",!1),t("#export-order-status").hide(),window.location.href=d.data.download_url):n(c+1,s)}else e("Export batch failed!"+d.data,"error")}})}function a(t){var e=Math.floor(t/1e3),o=Math.floor(e/60),r=Math.floor(o/60);return"".concat(r,"h ").concat(o%60,"m ").concat(e%60,"s")}t("#export-all").prop("checked",!0),t("#order-export-form").on("submit",(function(a){a.preventDefault();var c=parseInt(t("#export-batch-size").val()),s=t("#export-status").val()||[];t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"start_order_export",nonce:wcOrderGenerator.export_nonce,batch_size:c,export_all:!0,statuses:s},success:function(a){a.success?(o=a.data.total_orders,r=Date.now(),t("#start-order-export").prop("disabled",!0),t("#export-order-status").text("Exporting start").removeClass().addClass("notice notice-success").show(),n(0,a.data.export_session)):(e("Export initialization failed: "+a.data,"error"),t("#export-order-status").hide())}})})),t("#reset-order-export").on("click",(function(){t(".export-progress-bar").css("width","0%"),t("#export-total-processed, #export-success-count, #export-failed-count").text("0"),t("#export-elapsed-time").text("0s"),t("#export-time-remaining").text("--"),t("#start-order-export").prop("disabled",!1)}))})),jQuery(document).ready((function(t){function e(e){var o=t('\n <div class="wc-toast '.concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",'">\n ').concat(e,"\n </div>\n "));t("#toast-container").append(o),setTimeout((function(){return o.css("opacity","1")}),10),setTimeout((function(){o.css("opacity","0"),setTimeout((function(){return o.remove()}),300)}),3e3)}t("#toast-container").length||t("body").append('<div id="toast-container" style="position: fixed; top: 40px; right: 20px; z-index: 10000;"></div>');var o,r=!1,n=0,a=0,c=0;function s(p,u){var l=parseInt(t("#product-export-batch-size").val()),f=t("#product-type").val()||[],v=t("#product-category").val()||[],m=t("#product-tag").val()||[],x=Math.ceil(n/l);clearTimeout(o),o=setTimeout((function(){r&&function(t,e){i(t,e,"Export operation timed out")}(p,u)}),6e4),t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"export_product_batch",nonce:wcOrderGenerator.export_products_nonce,batch_size:l,batch_number:p,total_batches:x,product_types:f,categories:v,tags:m,export_session:u},success:function(f){if(clearTimeout(o),f.success){c=0;var v=(p+1)*l;!function(o,r,c){if(!n||n<=0)e("Number of products to export not found!","info");else{var s=Math.min(o/n*100,100);t(".product-export-progress-bar").css({width:s+"%","background-color":"green",height:"25px",transition:"width 0.5s ease-in-out"}),t("#product-export-total-processed").text(o),t("#product-export-success-count").text(r),t("#product-export-failed-count").text(c);var i=Date.now(),p=a?i-a:0;t("#product-export-elapsed-time").text(p>0?d(p):"0s");var u=p>0?o/(p/1e3):0,l=n-o,f=u>0?l/u:0;t("#product-export-time-remaining").text(f>0?d(1e3*f):"0s")}}(Math.min(v,n),f.data.success,f.data.failed),f.data.is_last_batch?(r=!1,t("#start-product-export").prop("disabled",!1),t(".product-export-progress-bar").css("width","100%"),e("Export completed successfully!","success"),f.data.download_url?window.location.href=f.data.download_url:e("Download URL not available","error")):s(p+1,u)}else i(p,u,"Product export batch failed: "+f.data)},error:function(){clearTimeout(o),i(p,u,"Connection error during export")}})}function i(o,n,a){++c<3?(e("".concat(a,". Retrying... (Attempt ").concat(c,"/").concat(3,")"),"warning"),setTimeout((function(){s(o,n)}),2e3)):(e("Export failed after ".concat(3," attempts. Please try again."),"error"),r=!1,t("#start-product-export").prop("disabled",!1))}function d(t){var e=Math.floor(t/1e3)%60,o=Math.floor(t/6e4)%60,r=Math.floor(t/36e5);return r>0?"".concat(r,"h ").concat(o,"m ").concat(e,"s"):o>0?"".concat(o,"m ").concat(e,"s"):"".concat(e,"s")}t("#product-export-form").on("submit",(function(i){i.preventDefault();var d=parseInt(t("#product-export-batch-size").val()),p=t("#product-type").val()||[],u=t("#product-category").val()||[],l=t("#product-tag").val()||[];c=0,clearTimeout(o),t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"start_product_export",nonce:wcOrderGenerator.export_products_nonce,batch_size:d,product_types:p,categories:u,tags:l},success:function(o){o.success?(r=!0,n=o.data.total_products,a=Date.now(),e("Starting export of ".concat(n," products"),"info"),t("#start-product-export").prop("disabled",!0),t("#product-export-total-processed").text("0"),t("#product-export-success-count").text("0"),t("#product-export-failed-count").text("0"),t("#product-export-elapsed-time").text("0s"),t("#product-export-time-remaining").text("--"),t(".product-export-progress-bar").css("width","0%"),s(0,o.data.export_session)):e("Product export initialization failed: "+o.data,"error")},error:function(){e("Connection error when starting export","error"),t("#start-product-export").prop("disabled",!1)}})})),t("#reset-product-export").on("click",(function(){clearTimeout(o),r=!1,c=0,t(".product-export-progress-bar").css("width","0%"),t("#product-export-total-processed, #product-export-success-count, #product-export-failed-count").text("0"),t("#product-export-elapsed-time").text("0s"),t("#product-export-time-remaining").text("--"),t("#start-product-export").prop("disabled",!1)}))})),jQuery(document).ready((function(t){function e(e){var o=t('\n <div class="wc-toast '.concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",'">\n ').concat(e,"\n </div>\n "));t("#toast-container").append(o),setTimeout((function(){return o.css("opacity","1")}),10),setTimeout((function(){o.css("opacity","0"),setTimeout((function(){return o.remove()}),300)}),3e3)}t("#toast-container").length||t("body").append('<div id="toast-container" style="position: fixed; top: 40px; right: 20px; z-index: 10000;"></div>'),t("#order-import-form").on("submit",(function(o){o.preventDefault();var r=t("#order-import-form .file-upload-input")[0].files[0];if(!r)return e("Please select a CSV file","warning"),o.preventDefault(),!1;var n=r.name.toLowerCase().endsWith(".csv");if(!["text/csv","application/vnd.ms-excel"].includes(r.type)||!n)return e("Invalid file type. Please upload a .csv file","error"),o.preventDefault(),!1;if(r.size>52428800)return e("File size exceeds 50MB limit","warning"),o.preventDefault(),!1;var a=new FormData(this);a.append("action","import_orders"),a.append("nonce",wcOrderGenerator.import_nonce),a.append("current_batch",0),a.append("skipped",0),a.append("successful",0);var c=Date.now(),s=0,i=0,d=0;!function o(r){t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:r,processData:!1,contentType:!1,success:function(n){if(n.success){var a=Date.now(),p=Math.floor((a-c)/1e3);s=n.data.total_orders,i=n.data.successful,d=n.data.skipped,t("#import-total-processed").text(i+d),t("#import-success-count").text(i),t("#import-failed-count").text(n.data.failed),t("#import-skipped-count").text(d),t("#import-elapsed-time").text(p+"s");var u=Math.floor((i+d)/s*100);if(t(".import-progress-bar").css({width:u+"%","background-color":"blue",height:"25px",transition:"width 0.5s ease-in-out"}),n.data.is_complete)return e("Order Import complete!","success"),void t(".import-progress-bar").css("background-color","green");var l=new FormData;l.append("action","import_orders"),l.append("nonce",wcOrderGenerator.import_nonce),l.append("current_batch",n.data.current_batch+1),l.append("csv_file",r.get("csv_file")),l.append("batch_size",r.get("batch_size")),l.append("skipped",d),l.append("successful",i),o(l)}else e("Order Import failed!"+n.data,"warning")},error:function(){e("Server error occurred!","error")}})}(a)})),t("#reset-order-import").on("click",(function(){exportIsGenerating=!1,t(".import-progress-bar").css("width","0%"),t("#import-total-processed, #import-success-count, #import-failed-count").text("0"),t("#import-elapsed-time").text("0s"),t("#order-import-form .file-upload-input").val(""),t("#order-import-form .file-upload-preview").html('\n <div class="upload-placeholder">\n <i class="upload-icon">📤</i>\n <span class="upload-text">Drag & Drop or Click to Upload CSV</span>\n </div>\n ')})),t("#order-import-form .file-upload-input").on("change",(function(){var e=this.files[0],o=t("#order-import-form .file-upload-preview");e?o.html('<div class="upload-file-info"><i class="upload-icon">📄</i> <span class="upload-text">'.concat(e.name,"</span></div>")):o.html('<div class="upload-placeholder"><i class="upload-icon">📤</i><span class="upload-text">Drag & Drop or Click to Upload CSV</span></div>')}))})),jQuery(document).ready((function(t){function e(e){var o=t('\n <div class="wc-toast '.concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",'">\n ').concat(e,"\n </div>\n "));t("#toast-container").append(o),setTimeout((function(){return o.css("opacity","1")}),10),setTimeout((function(){o.css("opacity","0"),setTimeout((function(){return o.remove()}),300)}),3e3)}t("#toast-container").length||t("body").append('<div id="toast-container" style="position: fixed; top: 40px; right: 20px; z-index: 10000;"></div>'),t("#product-import-form").on("submit",(function(o){o.preventDefault();var r=t("#product-import-form .file-upload-input")[0].files[0];if(!r)return e("Please select a CSV file","warning"),!1;var n=r.name.toLowerCase().endsWith(".csv");if(!["text/csv","application/vnd.ms-excel"].includes(r.type)&&!n)return e("Invalid file type. Please upload a .csv file","error"),!1;if(r.size>52428800)return e("File size exceeds 50MB limit","warning"),!1;var a=new FormData(this);a.append("action","import_products"),a.append("nonce",wcOrderGenerator.import_products_nonce),a.append("current_batch",0);var c=Date.now(),s=0,i=0,d=0,p=0;!function o(r){t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:r,processData:!1,contentType:!1,success:function(n){if(n.success){var a=Date.now(),u=Math.floor((a-c)/1e3);s=n.data.total_products,i+=n.data.successful,d+=n.data.failed,p+=n.data.skipped,t("#product-import-total-processed").text(i+d+p),t("#product-import-success-count").text(i),t("#product-import-failed-count").text(d),t("#product-import-skipped-count").text(p),t("#product-import-elapsed-time").text(u+"s");var l=Math.floor((n.data.current_batch*parseInt(r.get("batch_size"))+n.data.processed)/s*100);if(t(".product-import-progress-bar").css({width:l+"%","background-color":"blue",height:"25px",transition:"width 0.5s ease-in-out"}),n.data.is_complete)return e("Product Import complete!","success"),void t(".product-import-progress-bar").css("background-color","green");var f=new FormData;f.append("action","import_products"),f.append("nonce",wcOrderGenerator.import_products_nonce),f.append("current_batch",n.data.current_batch+1),f.append("csv_file",r.get("csv_file")),f.append("batch_size",r.get("batch_size")),setTimeout((function(){o(f)}),300)}else e("Product Import failed: "+(n.data||"Unknown error"),"error")},error:function(t,o,r){e("Server error occurred: "+r,"error")}})}(a)})),t("#reset-product-import").on("click",(function(){t(".product-import-progress-bar").css("width","0%"),t("#product-import-total-processed, #product-import-success-count, #product-import-failed-count, #product-import-skipped-count").text("0"),t("#product-import-elapsed-time").text("0s"),t("#product-import-form .file-upload-input").val(""),t("#product-import-form .file-upload-preview").html('\n <div class="upload-placeholder">\n <i class="upload-icon">📤</i>\n <span class="upload-text">Drag & Drop or Click to Upload CSV</span>\n </div>\n ')})),t("#product-import-form .file-upload-input").on("change",(function(){var e=this.files[0],o=t("#product-import-form .file-upload-preview");e?o.html('<div class="upload-file-info"><i class="upload-icon">📄</i> <span class="upload-text">'.concat(e.name,"</span></div>")):o.html('<div class="upload-placeholder"><i class="upload-icon">📤</i><span class="upload-text">Drag & Drop or Click to Upload CSV</span></div>')}));var o=t("#product-import-form .file-upload-wrapper");o.on("dragover",(function(e){e.preventDefault(),e.stopPropagation(),t(this).addClass("dragover")})),o.on("dragleave",(function(e){e.preventDefault(),e.stopPropagation(),t(this).removeClass("dragover")})),o.on("drop",(function(e){e.preventDefault(),e.stopPropagation(),t(this).removeClass("dragover");var o=e.originalEvent.dataTransfer.files;o.length&&(t("#product-import-form .file-upload-input")[0].files=o,t("#product-import-form .file-upload-input").trigger("change"))}))})),jQuery(document).ready((function(t){var e=3e3;function o(e){var o=t('\n <div class="wc-toast '.concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",'">\n ').concat(e,"\n </div>\n "));t("#toast-container").append(o),setTimeout((function(){return o.css("opacity","1")}),10),setTimeout((function(){o.css("opacity","0"),setTimeout((function(){return o.remove()}),300)}),3e3)}function r(e,o){var r=t('\n <div class="wc-confirm-dialog">\n <div class="wc-confirm-content">\n <h3>Confirm Deletion</h3>\n <p>Are you absolutely sure you want to delete ALL '.concat(e,'s? This action cannot be undone!</p>\n <div class="wc-confirm-buttons">\n <button class="button button-secondary cancel-delete">Cancel</button>\n <button class="button button-primary confirm-delete">Confirm Delete</button>\n </div>\n </div>\n </div>\n ')).appendTo("body");r.find(".cancel-delete").on("click",(function(){r.remove()})),r.find(".confirm-delete").on("click",(function(){r.remove(),o()}))}function n(r){var c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;t("#delete-".concat(r,"s-btn .poc-spinner")).show(),t("#delete-".concat(r,"s-btn")).prop("disabled",!0),t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"poc_get_counts",nonce:wcOrderGenerator.poc_nonce},success:function(e){if(e.success){var n="product"===r?e.data.product_count:e.data.order_count;if(0===n)return o("No ".concat(r,"s found to delete."),"warning"),void i(r);t("#".concat(r,"-total")).text(n);var c='\n <div class="info-container" style="display: flex; justify-content: space-between; margin-top: 10px;">\n <div style="display: flex; gap: 20px;">\n <div class="skip-info">Skipped: <span id="'.concat(r,'-skipped">0</span></div>\n <div class="retry-info">Retry: <span id="').concat(r,'-retry-count">0</span></div>\n </div>\n <div class="count-progress" id="').concat(r,'-count-progress">Progress: 0/').concat(n,"</div>\n </div>\n ");t("#".concat(r,"-progress-container .info-container")).remove(),t("#".concat(r,"-progress-container")).append(c),t("#".concat(r,"-progress-container")).slideDown(300),o("Starting ".concat(r," deletion process..."),"info"),setTimeout((function(){a(r,0,n,0,0,0)}),500)}else s(r,e.data||"Error getting counts")},error:function(t,o,a){c<3?setTimeout((function(){n(r,c+1)}),e):s(r,"Failed to initialize after ".concat(3," attempts: ").concat(a))}})}function a(r,n,i,d,p,u){t("#".concat(r,"-retry-count")).text(u),u>0&&(d=parseInt(t("#".concat(r,"-skipped")).text())+1,t("#".concat(r,"-skipped")).text(d),o("Retrying batch deletion (Attempt ".concat(u," of ").concat(3,")"),"warning")),t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",timeout:3e4,data:{action:"poc_delete_".concat(r,"s_batch"),nonce:wcOrderGenerator.poc_nonce,offset:n},success:function(l){if(l.success){var f=l.data.deleted+l.data.skipped,v=p+f,m=d+(l.data.skipped||0),x=Math.round(v/i*100);t("#delete-order").text("Deleting orders...").removeClass().addClass("notice notice-info").show(),t("#".concat(r,"-progress-bar")).css("width",x+"%"),t("#".concat(r,"-processed")).text(v),t("#".concat(r,"-skipped")).text(m),t("#".concat(r,"-count-progress")).text("Progress: ".concat(v,"/").concat(i)),t("#".concat(r,"-retry-count")).text("0"),l.data.errors&&l.data.errors.length>0&&o("Some ".concat(r,"s could not be deleted"),"warning"),l.data.done?setTimeout((function(){c(r,m,v)}),2e3):setTimeout((function(){a(r,n+f,i,m,v,0)}),1e3)}else u<3?setTimeout((function(){a(r,n,i,d,p,u+1)}),e):s(r,l.data||"Error deleting ".concat(r,"s"))},error:function(t,o,c){u<3?setTimeout((function(){a(r,n,i,d,p,u+1)}),e):s(r,"Failed to process batch after ".concat(3," attempts: ").concat(c))}})}function c(r,a,i){var d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"poc_get_counts",nonce:wcOrderGenerator.poc_nonce},success:function(e){if(e.success){var c,p="product"===r?e.data.product_count:e.data.order_count;if(t("#delete-".concat(r,"s-btn .poc-spinner")).hide(),0===p||p===a)o(c="Operation completed!\n".concat(a," ").concat(r,"s were skipped\n").concat(i-a," ").concat(r,"s have been successfully deleted!"),"success");else{if(!(p<a)){var u=d+1;return t("#".concat(r,"-retry-count")).text(u),o("Additional ".concat(r,"s found. Continuing deletion process... (Attempt ").concat(u,")"),"info"),void setTimeout((function(){n(r)}),5e3)}o(c="Operation completed!\n".concat(p," ").concat(r,"s remain\n").concat(i-p," ").concat(r,"s have been successfully deleted!"),"success")}var l='\n <div class="notice notice-success">\n <p>'.concat(c.replace(/\n/g,"<br>"),"</p>\n </div>\n ");t("#delete-order").after(l)}else s(r,"Error verifying ".concat(r," deletion"))},error:function(t,o,n){d<3?setTimeout((function(){c(r,a,i,d+1)}),e):s(r,"Failed to verify deletion after ".concat(3," attempts: ").concat(n))}})}function s(e,r){t("#delete-".concat(e,"s-btn .poc-spinner")).hide(),t("#delete-".concat(e,"s-btn")).prop("disabled",!1),o(r,"error")}function i(e){t("#".concat(e,"-progress-bar")).css("width","0%"),t("#".concat(e,"-processed")).text("0"),t("#".concat(e,"-total")).text("0"),t("#".concat(e,"-skipped")).text("0"),t("#".concat(e,"-retry-count")).text("0"),t("#".concat(e,"-count-progress")).text("Progress: 0/0"),t("#delete-".concat(e,"s-btn")).prop("disabled",!1),t("#delete-".concat(e,"s-btn .poc-spinner")).hide(),t("#delete-".concat(e)).hide(),o("".concat(e.charAt(0).toUpperCase()+e.slice(1)," progress has been reset successfully!"),"success")}t("#toast-container").length||t("body").append('<div id="toast-container" style="position: fixed; top: 40px; right: 20px; z-index: 10000;"></div>'),t("#delete-products-btn").click((function(){r("product",(function(){n("product")}))})),t("#delete-orders-btn").click((function(){r("order",(function(){n("order")}))})),["product","order"].forEach((function(e){t("<button>",{id:"reset-".concat(e,"-progress-btn"),class:"button button-secondary",text:"Reset",css:{float:"right","margin-left":"10px"}}).insertAfter("#".concat(e,"-progress-container"))})),t("#reset-product-progress-btn").on("click",(function(){i("product")})),t("#reset-order-progress-btn").on("click",(function(){i("order")}))}));1 jQuery(document).ready((function(t){var e=localStorage.getItem("activeTab");e?(t(".nav-tab").removeClass("nav-tab-active"),t(".tab-content").removeClass("active"),t('.nav-tab[href="'.concat(e,'"]')).addClass("nav-tab-active"),t(e).addClass("active")):(t(".nav-tab").first().addClass("nav-tab-active"),t(".tab-content").first().addClass("active")),t(".nav-tab").on("click",(function(e){e.preventDefault(),t(".nav-tab").removeClass("nav-tab-active"),t(this).addClass("nav-tab-active"),t(".tab-content").removeClass("active"),t(t(this).attr("href")).addClass("active"),localStorage.setItem("activeTab",t(this).attr("href"))}))})),jQuery(document).ready((function(t){function e(e){var o=t('\n <div class="wc-toast '.concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",'">\n ').concat(e,"\n </div>\n "));t("#toast-container").append(o),setTimeout((function(){return o.css("opacity","1")}),10),setTimeout((function(){o.css("opacity","0"),setTimeout((function(){return o.remove()}),300)}),3e3)}t("#toast-container").length||t("body").append('<div id="toast-container" style="position: fixed; top: 40px; right: 20px; z-index: 10000;"></div>');var o,r=!1,n=0,a=0,c=0,s=0,i=!1;function d(t){var e=Math.floor(t/1e3),o=Math.floor(e/60),r=Math.floor(o/60);return"".concat(r,"h ").concat(o%60,"m ").concat(e%60,"s")}function p(){var e=a+c,r=e/n*100;t(".progress-bar").css("width",r+"%"),t("#total-processed").text(e),t("#success-count").text(a),t("#failed-count").text(c);var s=e/((Date.now()-o)/1e3);t("#processing-rate").text(s.toFixed(2));var i=(n-e)/s;t("#time-remaining").text(d(1e3*i)),t("#elapsed-time").text(d(Date.now()-o))}function u(){if(!r||i)return l("Order Generation stopped","warning"),void e("Order Generation stopped","warning");var o=n-(a+c);if(o<=0)return l("Order Generation complete!","success"),void e("Order Generation complete!","success");var d=Math.min(t("#batch_size").val(),o);t("#generation-status").text("Processing batch ".concat(s+1,"...")).removeClass().addClass("notice notice-info").show(),t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"process_order_batch",nonce:wcOrderGenerator.nonce,batch_size:d,batch_number:s},success:function(t){t.success?(a+=t.data.success,c+=t.data.failed,s++,p(),i?(l("Generation stopped","warning"),e("Order Generation stopped","warning")):setTimeout(u,500)):(f("Error processing batch: "+t.data),e("Eror processing batch","error"))},error:function(t,o,r){i?(l("Generation stopped","warning"),e("Order Generation stopped","warning")):(f("Server error occurred: "+r),e("Server error occurred","error"))}})}function l(e,o){t("#generation-status").text(e).removeClass().addClass("notice notice-".concat(o)).show(),r=!1,i=!1,t("#start-generation").prop("disabled",!1),t("#stop-generation").prop("disabled",!0),t("#reset-generation").show()}function f(e){c+=0,p(),t("#time-remaining").text(d(c)),l(e,"error")}t("#order-generator-form").on("submit",(function(e){e.preventDefault();var d=parseInt(t("#num_orders").val());if(d<1||d>1e4)alert("Please enter a number between 1 and 10k");else{var p=parseInt(t("#batch_size").val());p<5||p>30?alert("Please enter a batch number between 5 and 30"):(r=!0,i=!1,n=d,a=0,c=0,s=0,o=Date.now(),t("#start-generation").prop("disabled",!0),t("#stop-generation").prop("disabled",!1),t("#reset-generation").hide(),t("#generation-status").text("Starting generation...").removeClass().addClass("notice notice-info").show(),t(".progress-bar").css("width","0%"),u())}})),t("#stop-generation").on("click",(function(){r&&(i=!0,t(this).prop("disabled",!0),t("#generation-status").text("Stopping generation...").removeClass().addClass("notice notice-warning").show(),t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"stop_order_generation",nonce:wcOrderGenerator.nonce}}).fail((function(t,e,o){})))})),t("#reset-generation").on("click",(function(){r=!1,i=!1,n=0,a=0,c=0,s=0,t(".progress-bar").css("width","0%"),t("#total-processed").text("0"),t("#success-count").text("0"),t("#failed-count").text("0"),t("#processing-rate").text("0"),t("#elapsed-time").text("0s"),t("#time-remaining").text("--"),t("#num_orders").val("100"),t("#start-generation").prop("disabled",!1),t("#stop-generation").prop("disabled",!0),t("#reset-generation").hide(),t("#generation-status").hide()}))})),jQuery(document).ready((function(t){function e(e){var o=t('\n <div class="wc-toast '.concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",'">\n ').concat(e,"\n </div>\n "));t("#toast-container").append(o),setTimeout((function(){return o.css("opacity","1")}),10),setTimeout((function(){o.css("opacity","0"),setTimeout((function(){return o.remove()}),300)}),3e3)}t("#toast-container").length||t("body").append('<div id="toast-container" style="position: fixed; top: 40px; right: 20px; z-index: 10000;"></div>');var o=!1,r=0,n=0,a=0,c=0;function s(){var e=(n+a)/r*100;t(".product-progress-bar").css("width",e+"%"),t("#products-processed").text(n),t("#products-failed").text(a)}function i(){if(!o)return t("#product-generation-status").text("Generation stopped").removeClass().addClass("notice notice-warning").show(),setTimeout((function(){t("#product-generation-status").fadeOut()}),3e3),t("#start-product-generation").prop("disabled",!1),t("#stop-product-generation").prop("disabled",!0),t("#reset-product-generation").show(),void e("Product Generation stopped","warning");var p=r-(n+a);if(p<=0)return t("#product-generation-status").text("Product generation complete!").removeClass().addClass("notice notice-success").show(),setTimeout((function(){t("#product-generation-status").fadeOut()}),5e3),t("#start-product-generation").prop("disabled",!1),t("#stop-product-generation").prop("disabled",!0),t("#reset-product-generation").show(),void e("Product Generation complete!","success");var u=Math.min(t("#product_batch_size").val(),p);t("#product-generation-status").text("Processing product batch ".concat(c+1,"...")).removeClass().addClass("notice notice-info").show(),t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"process_product_batch",nonce:wcOrderGenerator.products_nonce,batch_size:u,price_min:t("#price_min").val(),price_max:t("#price_max").val(),batch_number:c,product_types:window.selectedProductTypes,use_random_images:t("#use_random_images").is(":checked")?1:0},success:function(t){t.success?(n+=t.data.success,a+=t.data.failed,c++,s(),setTimeout(i,500)):d("Error processing product batch: "+t.data)},error:function(){d("Server error occurred during product generation")}})}function d(e){a+=parseInt(t("#product_batch_size").val()),s(),t("#product-generation-status").text(e).removeClass().addClass("notice notice-error").show(),o=!1,t("#start-product-generation").prop("disabled",!1),t("#stop-product-generation").prop("disabled",!0),t("#reset-product-generation").show()}t("#product-generator-form").on("submit",(function(e){e.preventDefault();var s=parseInt(t("#num_products").val());if(s<1||s>1e4)alert("Please enter a number between 1 and 10k");else{var d=parseInt(t("#product_batch_size").val());if(d<5||d>30)alert("Please enter a batch number between 5 and 30");else{var p=[];t('#product-generator-form input[name="product_types[]"]:checked').each((function(){p.push(t(this).val())})),0!==p.length?(o=!0,r=s,n=0,a=0,c=0,Date.now(),t("#start-product-generation").prop("disabled",!0),t("#stop-product-generation").prop("disabled",!1),t("#reset-product-generation").hide(),t("#product-generation-status").text("Starting product generation...").removeClass().addClass("notice notice-info").show(),t(".product-progress-bar").css("width","0%"),window.selectedProductTypes=p,i()):alert("Please select at least one product type.")}}})),t("#stop-product-generation").on("click",(function(){o=!1,t(this).prop("disabled",!0),t("#product-generation-status").text("Stopping product generation...").removeClass().addClass("notice notice-warning").show()})),t("#reset-product-generation").on("click",(function(){o=!1,r=0,n=0,a=0,c=0,t(".product-progress-bar").css("width","0%"),t("#products-processed").text("0"),t("#products-failed").text("0"),t("#start-product-generation").prop("disabled",!1),t("#stop-product-generation").prop("disabled",!0),t("#reset-product-generation").hide(),t("#product-generation-status").hide()}))})),jQuery(document).ready((function(t){function e(e){var o=t('\n <div class="wc-toast '.concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",'">\n ').concat(e,"\n </div>\n "));t("#toast-container").append(o),setTimeout((function(){return o.css("opacity","1")}),10),setTimeout((function(){o.css("opacity","0"),setTimeout((function(){return o.remove()}),300)}),3e3)}t("#toast-container").length||t("body").append('<div id="toast-container" style="position: fixed; top: 40px; right: 20px; z-index: 10000;"></div>');var o=0,r=0;function n(c,s){var i=parseInt(t("#export-batch-size").val()),d=t("#export-status").val()||[],p=Math.ceil(o/i);t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"export_order_batch",nonce:wcOrderGenerator.export_nonce,batch_size:i,batch_number:c,total_batches:p,export_all:!0,statuses:d,export_session:s},success:function(d){if(d.success){var p=(c+1)*i;!function(n,c,s){if(!o||o<=0)e("Exporting number of order not found!","info");else{var i=Math.min(n/o*100,100);t(".export-progress-bar").css({width:i+"%","background-color":"blue",height:"25px",transition:"width 0.5s ease-in-out"}),t("#export-total-processed").text(n),t("#export-success-count").text(c),t("#export-failed-count").text(s);var d=Date.now(),p=r?d-r:0;t("#export-elapsed-time").text(p>0?a(p):"0s");var u=p>0?n/(p/1e3):0,l=o-n,f=u>0?l/u:0;t("#export-time-remaining").text(f>0?a(1e3*f):"0s")}}(Math.min(p,o),d.data.success,d.data.failed),d.data.is_last_batch?(t("#start-order-export").prop("disabled",!1),t("#export-order-status").hide(),window.location.href=d.data.download_url):n(c+1,s)}else e("Export batch failed!"+d.data,"error")}})}function a(t){var e=Math.floor(t/1e3),o=Math.floor(e/60),r=Math.floor(o/60);return"".concat(r,"h ").concat(o%60,"m ").concat(e%60,"s")}t("#export-all").prop("checked",!0),t("#order-export-form").on("submit",(function(a){a.preventDefault();var c=parseInt(t("#export-batch-size").val()),s=t("#export-status").val()||[];t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"start_order_export",nonce:wcOrderGenerator.export_nonce,batch_size:c,export_all:!0,statuses:s},success:function(a){a.success?(o=a.data.total_orders,r=Date.now(),t("#start-order-export").prop("disabled",!0),t("#export-order-status").text("Exporting start").removeClass().addClass("notice notice-success").show(),n(0,a.data.export_session)):(e("Export initialization failed: "+a.data,"error"),t("#export-order-status").hide())}})})),t("#reset-order-export").on("click",(function(){t(".export-progress-bar").css("width","0%"),t("#export-total-processed, #export-success-count, #export-failed-count").text("0"),t("#export-elapsed-time").text("0s"),t("#export-time-remaining").text("--"),t("#start-order-export").prop("disabled",!1)}))})),jQuery(document).ready((function(t){function e(e){var o=t('\n <div class="wc-toast '.concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",'">\n ').concat(e,"\n </div>\n "));t("#toast-container").append(o),setTimeout((function(){return o.css("opacity","1")}),10),setTimeout((function(){o.css("opacity","0"),setTimeout((function(){return o.remove()}),300)}),3e3)}t("#toast-container").length||t("body").append('<div id="toast-container" style="position: fixed; top: 40px; right: 20px; z-index: 10000;"></div>');var o,r=!1,n=0,a=0,c=0;function s(p,u){var l=parseInt(t("#product-export-batch-size").val()),f=t("#product-type").val()||[],m=t("#product-category").val()||[],v=t("#product-tag").val()||[],x=Math.ceil(n/l);clearTimeout(o),o=setTimeout((function(){r&&function(t,e){i(t,e,"Export operation timed out")}(p,u)}),6e4),t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"export_product_batch",nonce:wcOrderGenerator.export_products_nonce,batch_size:l,batch_number:p,total_batches:x,product_types:f,categories:m,tags:v,export_session:u},success:function(f){if(clearTimeout(o),f.success){c=0;var m=(p+1)*l;!function(o,r,c){if(!n||n<=0)e("Number of products to export not found!","info");else{var s=Math.min(o/n*100,100);t(".product-export-progress-bar").css({width:s+"%","background-color":"green",height:"25px",transition:"width 0.5s ease-in-out"}),t("#product-export-total-processed").text(o),t("#product-export-success-count").text(r),t("#product-export-failed-count").text(c);var i=Date.now(),p=a?i-a:0;t("#product-export-elapsed-time").text(p>0?d(p):"0s");var u=p>0?o/(p/1e3):0,l=n-o,f=u>0?l/u:0;t("#product-export-time-remaining").text(f>0?d(1e3*f):"0s")}}(Math.min(m,n),f.data.success,f.data.failed),f.data.is_last_batch?(r=!1,t("#start-product-export").prop("disabled",!1),t(".product-export-progress-bar").css("width","100%"),e("Export completed successfully!","success"),f.data.download_url?window.location.href=f.data.download_url:e("Download URL not available","error")):s(p+1,u)}else i(p,u,"Product export batch failed: "+f.data)},error:function(){clearTimeout(o),i(p,u,"Connection error during export")}})}function i(o,n,a){++c<3?(e("".concat(a,". Retrying... (Attempt ").concat(c,"/").concat(3,")"),"warning"),setTimeout((function(){s(o,n)}),2e3)):(e("Export failed after ".concat(3," attempts. Please try again."),"error"),r=!1,t("#start-product-export").prop("disabled",!1))}function d(t){var e=Math.floor(t/1e3)%60,o=Math.floor(t/6e4)%60,r=Math.floor(t/36e5);return r>0?"".concat(r,"h ").concat(o,"m ").concat(e,"s"):o>0?"".concat(o,"m ").concat(e,"s"):"".concat(e,"s")}t("#product-export-form").on("submit",(function(i){i.preventDefault();var d=parseInt(t("#product-export-batch-size").val()),p=t("#product-type").val()||[],u=t("#product-category").val()||[],l=t("#product-tag").val()||[];c=0,clearTimeout(o),t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"start_product_export",nonce:wcOrderGenerator.export_products_nonce,batch_size:d,product_types:p,categories:u,tags:l},success:function(o){o.success?(r=!0,n=o.data.total_products,a=Date.now(),e("Starting export of ".concat(n," products"),"info"),t("#start-product-export").prop("disabled",!0),t("#product-export-total-processed").text("0"),t("#product-export-success-count").text("0"),t("#product-export-failed-count").text("0"),t("#product-export-elapsed-time").text("0s"),t("#product-export-time-remaining").text("--"),t(".product-export-progress-bar").css("width","0%"),s(0,o.data.export_session)):e("Product export initialization failed: "+o.data,"error")},error:function(){e("Connection error when starting export","error"),t("#start-product-export").prop("disabled",!1)}})})),t("#reset-product-export").on("click",(function(){clearTimeout(o),r=!1,c=0,t(".product-export-progress-bar").css("width","0%"),t("#product-export-total-processed, #product-export-success-count, #product-export-failed-count").text("0"),t("#product-export-elapsed-time").text("0s"),t("#product-export-time-remaining").text("--"),t("#start-product-export").prop("disabled",!1)}))})),jQuery(document).ready((function(t){function e(e){var o=t('\n <div class="wc-toast '.concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",'">\n ').concat(e,"\n </div>\n "));t("#toast-container").append(o),setTimeout((function(){return o.css("opacity","1")}),10),setTimeout((function(){o.css("opacity","0"),setTimeout((function(){return o.remove()}),300)}),3e3)}t("#toast-container").length||t("body").append('<div id="toast-container" style="position: fixed; top: 40px; right: 20px; z-index: 10000;"></div>'),t("#order-import-form").on("submit",(function(o){o.preventDefault();var r=t("#order-import-form .file-upload-input")[0].files[0];if(!r)return e("Please select a CSV file","warning"),o.preventDefault(),!1;var n=r.name.toLowerCase().endsWith(".csv");if(!["text/csv","application/vnd.ms-excel"].includes(r.type)||!n)return e("Invalid file type. Please upload a .csv file","error"),o.preventDefault(),!1;if(r.size>52428800)return e("File size exceeds 50MB limit","warning"),o.preventDefault(),!1;var a=new FormData(this);a.append("action","import_orders"),a.append("nonce",wcOrderGenerator.import_nonce),a.append("current_batch",0),a.append("skipped",0),a.append("successful",0);var c=Date.now(),s=0,i=0,d=0;!function o(r){t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:r,processData:!1,contentType:!1,success:function(n){if(n.success){var a=Date.now(),p=Math.floor((a-c)/1e3);s=n.data.total_orders,i=n.data.successful,d=n.data.skipped,t("#import-total-processed").text(i+d),t("#import-success-count").text(i),t("#import-failed-count").text(n.data.failed),t("#import-skipped-count").text(d),t("#import-elapsed-time").text(p+"s");var u=Math.floor((i+d)/s*100);if(t(".import-progress-bar").css({width:u+"%","background-color":"blue",height:"25px",transition:"width 0.5s ease-in-out"}),n.data.is_complete)return e("Order Import complete!","success"),void t(".import-progress-bar").css("background-color","green");var l=new FormData;l.append("action","import_orders"),l.append("nonce",wcOrderGenerator.import_nonce),l.append("current_batch",n.data.current_batch+1),l.append("csv_file",r.get("csv_file")),l.append("batch_size",r.get("batch_size")),l.append("skipped",d),l.append("successful",i),o(l)}else e("Order Import failed!"+n.data,"warning")},error:function(){e("Server error occurred!","error")}})}(a)})),t("#reset-order-import").on("click",(function(){exportIsGenerating=!1,t(".import-progress-bar").css("width","0%"),t("#import-total-processed, #import-success-count, #import-failed-count").text("0"),t("#import-elapsed-time").text("0s"),t("#order-import-form .file-upload-input").val(""),t("#order-import-form .file-upload-preview").html('\n <div class="upload-placeholder">\n <i class="upload-icon">📤</i>\n <span class="upload-text">Drag & Drop or Click to Upload CSV</span>\n </div>\n ')})),t("#order-import-form .file-upload-input").on("change",(function(){var e=this.files[0],o=t("#order-import-form .file-upload-preview");e?o.html('<div class="upload-file-info"><i class="upload-icon">📄</i> <span class="upload-text">'.concat(e.name,"</span></div>")):o.html('<div class="upload-placeholder"><i class="upload-icon">📤</i><span class="upload-text">Drag & Drop or Click to Upload CSV</span></div>')}))})),jQuery(document).ready((function(t){function e(e){var o=t('\n <div class="wc-toast '.concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",'">\n ').concat(e,"\n </div>\n "));t("#toast-container").append(o),setTimeout((function(){return o.css("opacity","1")}),10),setTimeout((function(){o.css("opacity","0"),setTimeout((function(){return o.remove()}),300)}),3e3)}t("#toast-container").length||t("body").append('<div id="toast-container" style="position: fixed; top: 40px; right: 20px; z-index: 10000;"></div>'),t("#product-import-form").on("submit",(function(o){o.preventDefault();var r=t("#product-import-form .file-upload-input")[0].files[0];if(!r)return e("Please select a CSV file","warning"),!1;var n=r.name.toLowerCase().endsWith(".csv");if(!["text/csv","application/vnd.ms-excel"].includes(r.type)&&!n)return e("Invalid file type. Please upload a .csv file","error"),!1;if(r.size>52428800)return e("File size exceeds 50MB limit","warning"),!1;var a=new FormData(this);a.append("action","import_products"),a.append("nonce",wcOrderGenerator.import_products_nonce),a.append("current_batch",0);var c=Date.now(),s=0,i=0,d=0,p=0;!function o(r){t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:r,processData:!1,contentType:!1,success:function(n){if(n.success){var a=Date.now(),u=Math.floor((a-c)/1e3);s=n.data.total_products,i+=n.data.successful,d+=n.data.failed,p+=n.data.skipped,t("#product-import-total-processed").text(i+d+p),t("#product-import-success-count").text(i),t("#product-import-failed-count").text(d),t("#product-import-skipped-count").text(p),t("#product-import-elapsed-time").text(u+"s");var l=Math.floor((n.data.current_batch*parseInt(r.get("batch_size"))+n.data.processed)/s*100);if(t(".product-import-progress-bar").css({width:l+"%","background-color":"blue",height:"25px",transition:"width 0.5s ease-in-out"}),n.data.is_complete)return e("Product Import complete!","success"),void t(".product-import-progress-bar").css("background-color","green");var f=new FormData;f.append("action","import_products"),f.append("nonce",wcOrderGenerator.import_products_nonce),f.append("current_batch",n.data.current_batch+1),f.append("csv_file",r.get("csv_file")),f.append("batch_size",r.get("batch_size")),setTimeout((function(){o(f)}),300)}else e("Product Import failed: "+(n.data||"Unknown error"),"error")},error:function(t,o,r){e("Server error occurred: "+r,"error")}})}(a)})),t("#reset-product-import").on("click",(function(){t(".product-import-progress-bar").css("width","0%"),t("#product-import-total-processed, #product-import-success-count, #product-import-failed-count, #product-import-skipped-count").text("0"),t("#product-import-elapsed-time").text("0s"),t("#product-import-form .file-upload-input").val(""),t("#product-import-form .file-upload-preview").html('\n <div class="upload-placeholder">\n <i class="upload-icon">📤</i>\n <span class="upload-text">Drag & Drop or Click to Upload CSV</span>\n </div>\n ')})),t("#product-import-form .file-upload-input").on("change",(function(){var e=this.files[0],o=t("#product-import-form .file-upload-preview");e?o.html('<div class="upload-file-info"><i class="upload-icon">📄</i> <span class="upload-text">'.concat(e.name,"</span></div>")):o.html('<div class="upload-placeholder"><i class="upload-icon">📤</i><span class="upload-text">Drag & Drop or Click to Upload CSV</span></div>')}));var o=t("#product-import-form .file-upload-wrapper");o.on("dragover",(function(e){e.preventDefault(),e.stopPropagation(),t(this).addClass("dragover")})),o.on("dragleave",(function(e){e.preventDefault(),e.stopPropagation(),t(this).removeClass("dragover")})),o.on("drop",(function(e){e.preventDefault(),e.stopPropagation(),t(this).removeClass("dragover");var o=e.originalEvent.dataTransfer.files;o.length&&(t("#product-import-form .file-upload-input")[0].files=o,t("#product-import-form .file-upload-input").trigger("change"))}))})),jQuery(document).ready((function(t){var e=3e3;function o(e){var o=t('\n <div class="wc-toast '.concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"success",'">\n ').concat(e,"\n </div>\n "));t("#toast-container").append(o),setTimeout((function(){return o.css("opacity","1")}),10),setTimeout((function(){o.css("opacity","0"),setTimeout((function(){return o.remove()}),300)}),3e3)}function r(e,o){var r=t('\n <div class="wc-confirm-dialog">\n <div class="wc-confirm-content">\n <h3>Confirm Deletion</h3>\n <p>Are you absolutely sure you want to delete ALL '.concat(e,'s? This action cannot be undone!</p>\n <div class="wc-confirm-buttons">\n <button class="button button-secondary cancel-delete">Cancel</button>\n <button class="button button-primary confirm-delete">Confirm Delete</button>\n </div>\n </div>\n </div>\n ')).appendTo("body");r.find(".cancel-delete").on("click",(function(){r.remove()})),r.find(".confirm-delete").on("click",(function(){r.remove(),o()}))}function n(r){var c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;t("#delete-".concat(r,"s-btn .poc-spinner")).show(),t("#delete-".concat(r,"s-btn")).prop("disabled",!0),t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"poc_get_counts",nonce:wcOrderGenerator.poc_nonce},success:function(e){if(e.success){var n="product"===r?e.data.product_count:e.data.order_count;if(0===n)return o("No ".concat(r,"s found to delete."),"warning"),void i(r);t("#".concat(r,"-total")).text(n);var c='\n <div class="info-container" style="display: flex; justify-content: space-between; margin-top: 10px;">\n <div style="display: flex; gap: 20px;">\n <div class="skip-info">Skipped: <span id="'.concat(r,'-skipped">0</span></div>\n <div class="retry-info">Retry: <span id="').concat(r,'-retry-count">0</span></div>\n </div>\n <div class="count-progress" id="').concat(r,'-count-progress">Progress: 0/').concat(n,"</div>\n </div>\n ");t("#".concat(r,"-progress-container .info-container")).remove(),t("#".concat(r,"-progress-container")).append(c),t("#".concat(r,"-progress-container")).slideDown(300),o("Starting ".concat(r," deletion process..."),"info"),setTimeout((function(){a(r,0,n,0,0,0)}),500)}else s(r,e.data||"Error getting counts")},error:function(t,o,a){c<3?setTimeout((function(){n(r,c+1)}),e):s(r,"Failed to initialize after ".concat(3," attempts: ").concat(a))}})}function a(r,n,i,d,p,u){t("#".concat(r,"-retry-count")).text(u),u>0&&(d=parseInt(t("#".concat(r,"-skipped")).text())+1,t("#".concat(r,"-skipped")).text(d),o("Retrying batch deletion (Attempt ".concat(u," of ").concat(3,")"),"warning")),t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",timeout:3e4,data:{action:"poc_delete_".concat(r,"s_batch"),nonce:wcOrderGenerator.poc_nonce,offset:n},success:function(l){if(l.success){var f=l.data.deleted+l.data.skipped,m=p+f,v=d+(l.data.skipped||0),x=Math.round(m/i*100);t("#delete-order").text("Deleting orders...").removeClass().addClass("notice notice-info").show(),t("#".concat(r,"-progress-bar")).css("width",x+"%"),t("#".concat(r,"-processed")).text(m),t("#".concat(r,"-skipped")).text(v),t("#".concat(r,"-count-progress")).text("Progress: ".concat(m,"/").concat(i)),t("#".concat(r,"-retry-count")).text("0"),l.data.errors&&l.data.errors.length>0&&o("Some ".concat(r,"s could not be deleted"),"warning"),l.data.done?setTimeout((function(){c(r,v,m)}),2e3):setTimeout((function(){a(r,n+f,i,v,m,0)}),1e3)}else u<3?setTimeout((function(){a(r,n,i,d,p,u+1)}),e):s(r,l.data||"Error deleting ".concat(r,"s"))},error:function(t,o,c){u<3?setTimeout((function(){a(r,n,i,d,p,u+1)}),e):s(r,"Failed to process batch after ".concat(3," attempts: ").concat(c))}})}function c(r,a,i){var d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;t.ajax({url:wcOrderGenerator.ajaxurl,type:"POST",data:{action:"poc_get_counts",nonce:wcOrderGenerator.poc_nonce},success:function(e){if(e.success){var c,p="product"===r?e.data.product_count:e.data.order_count;if(t("#delete-".concat(r,"s-btn .poc-spinner")).hide(),0===p||p===a)o(c="Operation completed!\n".concat(a," ").concat(r,"s were skipped\n").concat(i-a," ").concat(r,"s have been successfully deleted!"),"success");else{if(!(p<a)){var u=d+1;return t("#".concat(r,"-retry-count")).text(u),o("Additional ".concat(r,"s found. Continuing deletion process... (Attempt ").concat(u,")"),"info"),void setTimeout((function(){n(r)}),5e3)}o(c="Operation completed!\n".concat(p," ").concat(r,"s remain\n").concat(i-p," ").concat(r,"s have been successfully deleted!"),"success")}var l='\n <div class="notice notice-success">\n <p>'.concat(c.replace(/\n/g,"<br>"),"</p>\n </div>\n ");t("#delete-order").after(l)}else s(r,"Error verifying ".concat(r," deletion"))},error:function(t,o,n){d<3?setTimeout((function(){c(r,a,i,d+1)}),e):s(r,"Failed to verify deletion after ".concat(3," attempts: ").concat(n))}})}function s(e,r){t("#delete-".concat(e,"s-btn .poc-spinner")).hide(),t("#delete-".concat(e,"s-btn")).prop("disabled",!1),o(r,"error")}function i(e){t("#".concat(e,"-progress-bar")).css("width","0%"),t("#".concat(e,"-processed")).text("0"),t("#".concat(e,"-total")).text("0"),t("#".concat(e,"-skipped")).text("0"),t("#".concat(e,"-retry-count")).text("0"),t("#".concat(e,"-count-progress")).text("Progress: 0/0"),t("#delete-".concat(e,"s-btn")).prop("disabled",!1),t("#delete-".concat(e,"s-btn .poc-spinner")).hide(),t("#delete-".concat(e)).hide(),o("".concat(e.charAt(0).toUpperCase()+e.slice(1)," progress has been reset successfully!"),"success")}t("#toast-container").length||t("body").append('<div id="toast-container" style="position: fixed; top: 40px; right: 20px; z-index: 10000;"></div>'),t("#delete-products-btn").click((function(){r("product",(function(){n("product")}))})),t("#delete-orders-btn").click((function(){r("order",(function(){n("order")}))})),["product","order"].forEach((function(e){t("<button>",{id:"reset-".concat(e,"-progress-btn"),class:"button button-secondary",text:"Reset",css:{float:"right","margin-left":"10px"}}).insertAfter("#".concat(e,"-progress-container"))})),t("#reset-product-progress-btn").on("click",(function(){i("product")})),t("#reset-order-progress-btn").on("click",(function(){i("order")}))})); -
wc-bulk-order-generator/trunk/includes/class-bulk-product-Import.php
r3315024 r3461881 1 1 <?php 2 /** 3 * WC Bulk Product Generator 4 * 5 * @package WcBulkOrderGenerator 6 */ 7 8 namespace WcBulkOrderGenerator; 2 9 3 10 if (!defined('ABSPATH')) { … … 90 97 switch ($product_type) { 91 98 case 'variable': 92 $product = new WC_Product_Variable();99 $product = new \WC_Product_Variable(); 93 100 break; 94 101 case 'grouped': 95 $product = new WC_Product_Grouped();102 $product = new \WC_Product_Grouped(); 96 103 break; 97 104 case 'external': 98 105 case 'affiliate': 99 $product = new WC_Product_External();106 $product = new \WC_Product_External(); 100 107 break; 101 108 default: 102 $product = new WC_Product_Simple();109 $product = new \WC_Product_Simple(); 103 110 } 104 111 … … 317 324 $taxonomy = sanitize_title($attr_name); 318 325 $options = isset($attr_values[$i]) ? explode('|', $attr_values[$i]) : []; 319 $attribute = new WC_Product_Attribute();326 $attribute = new \WC_Product_Attribute(); 320 327 $attribute->set_name($taxonomy); 321 328 $attribute->set_options($options); … … 348 355 $successful++; 349 356 350 } catch ( Exception $e) {357 } catch (\Exception $e) { 351 358 error_log('Product import error: ' . $e->getMessage()); 352 359 $failed++; -
wc-bulk-order-generator/trunk/includes/class-bulk-product-export.php
r3245853 r3461881 1 1 <?php 2 /** 3 * WC Bulk Product Generator 4 * 5 * @package WcBulkOrderGenerator 6 */ 7 8 namespace WcBulkOrderGenerator; 2 9 3 10 if (!defined('ABSPATH')) { … … 21 28 } 22 29 23 $product_types = !empty($_POST['product_types']) ? array_map('sanitize_text_field', $_POST['product_types']) : [];24 $categories = !empty($_POST['categories']) ? array_map('sanitize_text_field', $_POST['categories']) : [];25 $tags = !empty($_POST['tags']) ? array_map('sanitize_text_field', $_POST['tags']) : [];30 $product_types = !empty($_POST['product_types']) ? array_map('sanitize_text_field', wp_unslash($_POST['product_types'])) : []; 31 $categories = !empty($_POST['categories']) ? array_map('sanitize_text_field', wp_unslash($_POST['categories'])) : []; 32 $tags = !empty($_POST['tags']) ? array_map('sanitize_text_field', wp_unslash($_POST['tags'])) : []; 26 33 27 34 $args = [ … … 87 94 } 88 95 89 $query = new WP_Query($args);96 $query = new \WP_Query($args); 90 97 $total_products = $query->found_posts; 91 98 … … 112 119 $batch_number = intval($_POST['batch_number']); 113 120 $total_batches = intval($_POST['total_batches']); 114 $export_session = sanitize_text_field( $_POST['export_session']);115 $product_types = !empty($_POST['product_types']) ? array_map('sanitize_text_field', $_POST['product_types']) : [];116 $categories = !empty($_POST['categories']) ? array_map('sanitize_text_field', $_POST['categories']) : [];117 $tags = !empty($_POST['tags']) ? array_map('sanitize_text_field', $_POST['tags']) : [];121 $export_session = sanitize_text_field(wp_unslash($_POST['export_session'])); 122 $product_types = !empty($_POST['product_types']) ? array_map('sanitize_text_field', wp_unslash($_POST['product_types'])) : []; 123 $categories = !empty($_POST['categories']) ? array_map('sanitize_text_field', wp_unslash($_POST['categories'])) : []; 124 $tags = !empty($_POST['tags']) ? array_map('sanitize_text_field', wp_unslash($_POST['tags'])) : []; 118 125 119 126 $args = [ … … 180 187 } 181 188 182 $query = new WP_Query($args);189 $query = new \WP_Query($args); 183 190 $products = $query->posts; 184 191 … … 404 411 405 412 $success_count++; 406 } catch ( Exception $e) {413 } catch (\Exception $e) { 407 414 $failed_count++; 408 415 } -
wc-bulk-order-generator/trunk/includes/class-wc-bulk-delete.php
r3245853 r3461881 1 1 <?php 2 /** 3 * WC Bulk Product Generator 4 * 5 * @package WcBulkOrderGenerator 6 */ 7 8 namespace WcBulkOrderGenerator; 2 9 3 10 if (!defined('ABSPATH')) { … … 85 92 // error_log('Failed to delete order ID: ' . $order->get_id()); 86 93 } 87 } catch ( Exception $e) {94 } catch (\Exception $e) { 88 95 $skipped++; 89 96 $errors[] = array( … … 160 167 ); 161 168 } 162 } catch ( Exception $e) {169 } catch (\Exception $e) { 163 170 $skipped++; 164 171 $errors[] = array( -
wc-bulk-order-generator/trunk/includes/class-wc-bulk-order-export.php
r3315024 r3461881 1 1 <?php 2 /** 3 * WC Bulk Order Export 4 * 5 * @package WcBulkOrderGenerator 6 */ 7 8 namespace WcBulkOrderGenerator; 2 9 3 10 if (!defined('ABSPATH')) { … … 21 28 } 22 29 23 $export_all = isset($_POST['export_all']) ? filter_var($_POST['export_all'], FILTER_VALIDATE_BOOLEAN) : false; 24 $date_from = $export_all ? null : sanitize_text_field($_POST['date_from']); 25 $date_to = $export_all ? null : sanitize_text_field($_POST['date_to']); 26 $statuses = isset($_POST['statuses']) ? array_map('sanitize_text_field', $_POST['statuses']) : []; 30 $export_all = isset($_POST['export_all']) ? filter_var(wp_unslash($_POST['export_all']), FILTER_VALIDATE_BOOLEAN) : false; 31 $date_from = $export_all ? null : sanitize_text_field(wp_unslash($_POST['date_from'])); 32 $date_to = $export_all ? null : sanitize_text_field(wp_unslash($_POST['date_to'])); 33 $statuses = isset($_POST['statuses']) ? array_map('sanitize_text_field', wp_unslash($_POST['statuses'])) : []; 34 35 27 36 28 37 $args = [ … … 67 76 $batch_number = intval($_POST['batch_number']); 68 77 $total_batches = intval($_POST['total_batches']); 69 $export_session = sanitize_text_field( $_POST['export_session']);70 $export_all = isset($_POST['export_all']) ? filter_var( $_POST['export_all'], FILTER_VALIDATE_BOOLEAN) : false;71 $date_from = $export_all ? null : sanitize_text_field( $_POST['date_from']);72 $date_to = $export_all ? null : sanitize_text_field( $_POST['date_to']);73 $statuses = isset($_POST['statuses']) ? array_map('sanitize_text_field', $_POST['statuses']) : [];78 $export_session = sanitize_text_field(wp_unslash($_POST['export_session'])); 79 $export_all = isset($_POST['export_all']) ? filter_var(wp_unslash($_POST['export_all']), FILTER_VALIDATE_BOOLEAN) : false; 80 $date_from = $export_all ? null : sanitize_text_field(wp_unslash($_POST['date_from'])); 81 $date_to = $export_all ? null : sanitize_text_field(wp_unslash($_POST['date_to'])); 82 $statuses = isset($_POST['statuses']) ? array_map('sanitize_text_field', wp_unslash($_POST['statuses'])) : []; 74 83 75 84 $args = [ … … 175 184 176 185 $success_count++; 177 } catch ( Exception $e) {186 } catch (\Exception $e) { 178 187 $failed_count++; 179 188 } … … 203 212 } 204 213 205 // Initialize the product generator206 new WC_Bulk_Order_Export();214 // Initialize the order export 215 new \WcBulkOrderGenerator\WC_Bulk_Order_Export(); -
wc-bulk-order-generator/trunk/includes/class-wc-bulk-order-import.php
r3315024 r3461881 1 1 <?php 2 /** 3 * WC Bulk Product Generator 4 * 5 * @package WcBulkOrderGenerator 6 */ 7 8 namespace WcBulkOrderGenerator; 2 9 3 10 if (!defined('ABSPATH')) { … … 100 107 // Set shipping method if provided 101 108 if (!empty($first_entry['shipping_method'])) { 102 $shipping_item = new WC_Order_Item_Shipping();109 $shipping_item = new \WC_Order_Item_Shipping(); 103 110 $shipping_item->set_method_title($first_entry['shipping_method']); 104 111 $order->add_item($shipping_item); … … 116 123 if (!$product) { 117 124 // Create a new product if not found 118 $product = new WC_Product();125 $product = new \WC_Product(); 119 126 $product->set_name($product_entry['product_name']); 120 127 $product->set_price($product_entry['product_price']); … … 123 130 124 131 // Create order item 125 $item = new WC_Order_Item_Product();132 $item = new \WC_Order_Item_Product(); 126 133 $item->set_product($product); 127 134 $item->set_quantity($product_entry['quantity']); … … 139 146 140 147 $successful++; 141 } catch ( Exception $e) {148 } catch (\Exception $e) { 142 149 error_log('Order import error: ' . $e->getMessage()); 143 150 $failed++; … … 156 163 157 164 // Process uploaded CSV 158 if (!isset($_FILES['csv_file']) ) {165 if (!isset($_FILES['csv_file']) || !isset($_FILES['csv_file']['tmp_name'])) { 159 166 wp_send_json_error('No file uploaded'); 160 167 } 161 168 162 $file = $_FILES['csv_file']['tmp_name']; 169 // Sanitize and validate the uploaded file 170 $file_tmp_name = sanitize_text_field(wp_unslash($_FILES['csv_file']['tmp_name'])); 171 172 // Verify it's a valid uploaded file 173 if (!is_uploaded_file($file_tmp_name)) { 174 wp_send_json_error('Invalid file upload'); 175 } 176 163 177 $batch_size = intval($_POST['batch_size'] ?? 50); 164 178 $current_batch = intval($_POST['current_batch'] ?? 0); … … 167 181 $successful_total = intval($_POST['successful'] ?? 0); 168 182 169 $orders = $this->parse_csv($file );183 $orders = $this->parse_csv($file_tmp_name); 170 184 $total_orders = count($orders); 171 185 -
wc-bulk-order-generator/trunk/includes/class-wc-bulk-product-generator.php
r3315024 r3461881 1 1 <?php 2 /** 3 * WC Bulk Product Generator 4 * 5 * @package WcBulkOrderGenerator 6 */ 7 8 namespace WcBulkOrderGenerator; 2 9 3 10 if (!defined('ABSPATH')) { … … 63 70 $price_min = isset($_POST['price_min']) ? floatval($_POST['price_min']) : 10; 64 71 $price_max = isset($_POST['price_max']) ? floatval($_POST['price_max']) : 100; 65 $product_types = isset($_POST['product_types']) && is_array($_POST['product_types']) ? array_map('sanitize_text_field', $_POST['product_types']) : array('simple'); 72 $product_types = isset($_POST['product_types']) && is_array($_POST['product_types']) ? array_map('sanitize_text_field', wp_unslash($_POST['product_types'])) : array('simple'); 73 $use_random_images = isset($_POST['use_random_images']) ? absint($_POST['use_random_images']) : 0; 66 74 67 75 if ($batch_size < 1 || $batch_size > 50) { … … 85 93 // Verify product data 86 94 if (empty($product_data['title']) || empty($product_data['description'])) { 87 throw new Exception('Invalid product data generated');95 throw new \Exception('Invalid product data generated'); 88 96 } 89 97 90 $product = $this->create_product($product_data );98 $product = $this->create_product($product_data, $use_random_images); 91 99 92 100 if ($product && !is_wp_error($product) && $product->get_id() > 0) { … … 102 110 unset($product); 103 111 wp_cache_flush(); 104 } catch ( Exception $e) {112 } catch (\Exception $e) { 105 113 $failed_count++; 106 114 $errors[] = $e->getMessage(); … … 118 126 )); 119 127 120 } catch ( Exception $e) {128 } catch (\Exception $e) { 121 129 wp_send_json_error(array( 122 130 'message' => $e->getMessage(), … … 177 185 } 178 186 179 private function create_product($data ) {187 private function create_product($data, $use_random_images = 0) { 180 188 try { 181 189 $type = isset($data['type']) ? $data['type'] : 'simple'; 182 190 switch ($type) { 183 191 case 'variable': 184 $product = new WC_Product_Variable();192 $product = new \WC_Product_Variable(); 185 193 break; 186 194 case 'grouped': 187 $product = new WC_Product_Grouped();195 $product = new \WC_Product_Grouped(); 188 196 break; 189 197 case 'external': 190 198 case 'affiliate': 191 $product = new WC_Product_External();199 $product = new \WC_Product_External(); 192 200 break; 193 201 case 'simple': 194 202 default: 195 $product = new WC_Product_Simple();203 $product = new \WC_Product_Simple(); 196 204 break; 197 205 } … … 236 244 $product_id = $product->save(); 237 245 if (!$product_id) { 238 throw new Exception('Failed to save product');246 throw new \Exception('Failed to save product'); 239 247 } 240 248 // Add categories … … 243 251 wp_set_object_terms($product_id, $category_ids, 'product_cat'); 244 252 } 245 // Add placeholder image 246 $this->maybe_add_placeholder_image($product_id); 253 // Add images based on checkbox 254 if ($use_random_images) { 255 $this->add_random_images($product_id); 256 } else { 257 // Add placeholder image 258 $this->maybe_add_placeholder_image($product_id); 259 } 247 260 // Add attributes/variations for variable products 248 261 if ($type === 'variable') { … … 254 267 } 255 268 return wc_get_product($product_id); // Return the updated product object 256 } catch ( Exception $e) {257 return new WP_Error('product_creation_failed', $e->getMessage());269 } catch (\Exception $e) { 270 return new \WP_Error('product_creation_failed', $e->getMessage()); 258 271 } 259 272 } … … 283 296 set_post_thumbnail($product_id, $placeholder_id); 284 297 } 298 } 299 300 /** 301 * Add random images from the images folder to product 302 * 303 * @param int $product_id The product ID 304 */ 305 private function add_random_images($product_id) { 306 // Define the images folder path 307 $images_folder = WC_BULK_GENERATOR_PLUGIN_DIR . 'images/'; 308 309 // Check if images folder exists 310 if (!is_dir($images_folder)) { 311 // Fallback to placeholder if folder doesn't exist 312 $this->maybe_add_placeholder_image($product_id); 313 return; 314 } 315 316 // Get all image files from the folder 317 $allowed_extensions = array('jpg', 'jpeg', 'png', 'gif', 'webp'); 318 $image_files = array(); 319 320 if ($handle = opendir($images_folder)) { 321 while (false !== ($file = readdir($handle))) { 322 $file_extension = strtolower(pathinfo($file, PATHINFO_EXTENSION)); 323 if (in_array($file_extension, $allowed_extensions)) { 324 $image_files[] = $images_folder . $file; 325 } 326 } 327 closedir($handle); 328 } 329 330 // If no images found, use placeholder 331 if (empty($image_files)) { 332 $this->maybe_add_placeholder_image($product_id); 333 return; 334 } 335 336 // Randomly select 1-4 images 337 shuffle($image_files); 338 $num_images = wp_rand(1, min(4, count($image_files))); 339 $selected_images = array_slice($image_files, 0, $num_images); 340 341 $attachment_ids = array(); 342 343 foreach ($selected_images as $index => $image_path) { 344 // Upload image to WordPress media library 345 $attachment_id = $this->upload_image_to_media_library($image_path, $product_id); 346 347 if ($attachment_id) { 348 $attachment_ids[] = $attachment_id; 349 350 // Set the first image as featured image 351 if ($index === 0) { 352 set_post_thumbnail($product_id, $attachment_id); 353 } 354 } 355 } 356 357 // Set gallery images (excluding the featured image) 358 if (count($attachment_ids) > 1) { 359 $product = wc_get_product($product_id); 360 if ($product) { 361 $gallery_ids = array_slice($attachment_ids, 1); 362 $product->set_gallery_image_ids($gallery_ids); 363 $product->save(); 364 } 365 } 366 } 367 368 /** 369 * Upload an image to WordPress media library 370 * 371 * @param string $image_path Full path to the image file 372 * @param int $product_id The product ID to attach the image to 373 * @return int|false Attachment ID on success, false on failure 374 */ 375 private function upload_image_to_media_library($image_path, $product_id) { 376 // Check if file exists 377 if (!file_exists($image_path)) { 378 return false; 379 } 380 381 // Get the file name 382 $filename = basename($image_path); 383 384 // Check if this image already exists in media library 385 $existing_attachment = get_posts(array( 386 'post_type' => 'attachment', 387 'meta_query' => array( 388 array( 389 'key' => '_wp_attached_file', 390 'value' => $filename, 391 'compare' => 'LIKE' 392 ) 393 ), 394 'posts_per_page' => 1, 395 'fields' => 'ids' 396 )); 397 398 // If image already exists, reuse it 399 if (!empty($existing_attachment)) { 400 return $existing_attachment[0]; 401 } 402 403 // Include required WordPress files 404 require_once(ABSPATH . 'wp-admin/includes/file.php'); 405 require_once(ABSPATH . 'wp-admin/includes/media.php'); 406 require_once(ABSPATH . 'wp-admin/includes/image.php'); 407 408 // Upload the file 409 $upload = wp_upload_bits($filename, null, file_get_contents($image_path)); 410 411 if ($upload['error']) { 412 return false; 413 } 414 415 // Prepare attachment data 416 $file_path = $upload['file']; 417 $file_type = wp_check_filetype($filename, null); 418 419 $attachment = array( 420 'post_mime_type' => $file_type['type'], 421 'post_title' => sanitize_file_name(pathinfo($filename, PATHINFO_FILENAME)), 422 'post_content' => '', 423 'post_status' => 'inherit' 424 ); 425 426 // Insert the attachment 427 $attachment_id = wp_insert_attachment($attachment, $file_path, $product_id); 428 429 if (is_wp_error($attachment_id)) { 430 return false; 431 } 432 433 // Generate attachment metadata 434 $attachment_data = wp_generate_attachment_metadata($attachment_id, $file_path); 435 wp_update_attachment_metadata($attachment_id, $attachment_data); 436 437 return $attachment_id; 285 438 } 286 439 … … 334 487 // Set attributes 335 488 $product->set_attributes(array_map(function($attr) { 336 $attribute = new WC_Product_Attribute();489 $attribute = new \WC_Product_Attribute(); 337 490 $attribute->set_name($attr['name']); 338 491 $attribute->set_options(explode(' | ', $attr['value'])); … … 349 502 $combinations = $this->cartesian_product($attr_values); 350 503 foreach ($combinations as $combo) { 351 $variation = new WC_Product_Variation();504 $variation = new \WC_Product_Variation(); 352 505 $variation->set_parent_id($product_id); 353 506 $variation_attributes = array(); … … 415 568 416 569 // Initialize the product generator 417 new WC_Bulk_Product_Generator();570 new \WcBulkOrderGenerator\WC_Bulk_Product_Generator(); -
wc-bulk-order-generator/trunk/js/generator.js
r3458624 r3461881 351 351 function processProductBatch() { 352 352 if (!isGeneratingProducts) { 353 $('#product-generation-status').text('Generation stopped').removeClass().addClass('notice notice-warning').show(); 353 const statusMsg = 'Generation stopped'; 354 $('#product-generation-status').text(statusMsg).removeClass().addClass('notice notice-warning').show(); 355 // Auto-hide after 3 seconds 356 setTimeout(function() { 357 $('#product-generation-status').fadeOut(); 358 }, 3000); 354 359 $('#start-product-generation').prop('disabled', false); 355 360 $('#stop-product-generation').prop('disabled', true); … … 363 368 const remainingProducts = totalProducts - (productSuccessCount + productFailedCount); 364 369 if (remainingProducts <= 0) { 365 $('#product-generation-status').text('Product generation complete!').removeClass().addClass('notice notice-success').show(); 370 const statusMsg = 'Product generation complete!'; 371 $('#product-generation-status').text(statusMsg).removeClass().addClass('notice notice-success').show(); 372 // Auto-hide after 5 seconds 373 setTimeout(function() { 374 $('#product-generation-status').fadeOut(); 375 }, 5000); 366 376 $('#start-product-generation').prop('disabled', false); 367 377 $('#stop-product-generation').prop('disabled', true); … … 384 394 price_max: $('#price_max').val(), 385 395 batch_number: currentProductBatch, 386 product_types: window.selectedProductTypes 396 product_types: window.selectedProductTypes, 397 use_random_images: $('#use_random_images').is(':checked') ? 1 : 0 387 398 }, 388 399 -
wc-bulk-order-generator/trunk/readme.txt
r3458624 r3461881 1 === WC Bulk Order Generator===1 === Bulk Order & Product Generator, Import Export for WooCommerce === 2 2 Contributors: devsabbirahmed 3 3 Tags: order export, woocommerce, generator, bulk order generator, bulk product generator 4 4 Requires at least: 5.9 5 Tested up to: 6. 85 Tested up to: 6.9 6 6 Requires PHP: 5.6 7 Stable tag: 1.4. 27 Stable tag: 1.4.3 8 8 License: GPL-2.0+ 9 9 License URI: http://www.gnu.org/licenses/gpl-2.0.txt … … 13 13 == Description == 14 14 15 WC Bulk Order Generatorhelps developers and store owners create realistic WooCommerce test data quickly. Generate thousands of WooCommerce products and orders with just a few clicks.15 Bulk Order & Product Generator, Import Export for WooCommerce helps developers and store owners create realistic WooCommerce test data quickly. Generate thousands of WooCommerce products and orders with just a few clicks. 16 16 17 17 ## 🚀 Key Features … … 95 95 == Changelog == 96 96 97 ### 1.4.3 – 15 Feb 2025 98 - **Enhancement:** SDK and Product image generator 99 97 100 ### 1.4.2 – 11 Feb 2025 98 101 - ** 🛠 Maintenance Release** -
wc-bulk-order-generator/trunk/wc-bulk-order-generator.php
r3458624 r3461881 1 1 <?php 2 2 /** 3 * Plugin Name: WC Bulk Order Generator3 * Plugin Name: Bulk Order & Product Generator, Import Export for WooCommerce 4 4 * 5 5 * @author devsabbirahmed 6 6 * @copyright 2024- SABBIRSAM 7 7 * @license GPL-2.0-or-laters 8 * @package WC Bulk Order Generator8 * @package Bulk Order & Product Generator, Import Export for WooCommerce 9 9 * 10 * Plugin URI: https:// github.com/sabbirsam/WooCommerce-Bulk-Order-Generator11 * Description: Generate s bulk random orders for WooCommerce testing with optimized batch processing12 * Version: 1.4. 210 * Plugin URI: https://wordpress.org/plugins/wc-bulk-order-generator 11 * Description: Generate, import, export, and delete WooCommerce orders and products in bulk with optimized batch processing for fast, reliable store management and testing. 12 * Version: 1.4.3 13 13 * Requires at least: 5.9 14 14 * Requires PHP: 5.6 15 * Requires Plugins: woocommerce 15 16 * Author: sabbirsam 16 17 * Author URI: https://profiles.wordpress.org/devsabbirahmed/ … … 28 29 if ( ! isset( $wbog_fs ) ) { 29 30 // Include Freemius SDK. 30 require_once dirname( __FILE__ ) . '/ freemius/start.php';31 require_once dirname( __FILE__ ) . '/vendor/freemius/start.php'; 31 32 $wbog_fs = fs_dynamic_init( array( 32 33 'id' => '19520', … … 62 63 63 64 // Define plugin constants. 64 define('WC_BULK_GENERATOR_VERSION', '1.4. 2');65 define('WC_BULK_GENERATOR_VERSION', '1.4.3'); 65 66 define( 'WC_BULK_GENERATOR_PLUGIN_FILE', __FILE__ ); 66 67 define('WC_BULK_GENERATOR_PLUGIN_DIR', plugin_dir_path(__FILE__)); … … 136 137 private function init_dependencies() { 137 138 $dependencies = [ 138 'W C_Bulk_Product_Generator' => 'includes/class-wc-bulk-product-generator.php',139 'W C_Bulk_Order_Export' => 'includes/class-wc-bulk-order-export.php',140 'W C_Bulk_Product_Export' => 'includes/class-bulk-product-export.php',141 'W C_Bulk_Order_Import' => 'includes/class-wc-bulk-order-import.php',142 'W C_Bulk_Delete' => 'includes/class-wc-bulk-delete.php',143 'W C_Bulk_Product_Import' => 'includes/class-bulk-product-Import.php',139 'WcBulkOrderGenerator\\WC_Bulk_Product_Generator' => 'includes/class-wc-bulk-product-generator.php', 140 'WcBulkOrderGenerator\\WC_Bulk_Order_Export' => 'includes/class-wc-bulk-order-export.php', 141 'WcBulkOrderGenerator\\WC_Bulk_Product_Export' => 'includes/class-bulk-product-export.php', 142 'WcBulkOrderGenerator\\WC_Bulk_Order_Import' => 'includes/class-wc-bulk-order-import.php', 143 'WcBulkOrderGenerator\\WC_Bulk_Delete' => 'includes/class-wc-bulk-delete.php', 144 'WcBulkOrderGenerator\\WC_Bulk_Product_Import' => 'includes/class-bulk-product-Import.php', 144 145 ]; 145 146 … … 164 165 } 165 166 166 // Instantiate the classes dynamically 167 $this->product_generator = new WC_Bulk_Product_Generator(); 168 $this->order_export = new WC_Bulk_Order_Export(); 169 $this->product_export = new WC_Bulk_Product_Export(); 170 $this->order_import = new WC_Bulk_Order_Import(); 171 $this->product_import = new WC_Bulk_Product_Import(); 172 $this->bulk_delete = new WC_Bulk_Delete(); 173 } 174 175 167 // Instantiate the classes dynamically with namespaces 168 $this->product_generator = new \WcBulkOrderGenerator\WC_Bulk_Product_Generator(); 169 $this->order_export = new \WcBulkOrderGenerator\WC_Bulk_Order_Export(); 170 $this->product_export = new \WcBulkOrderGenerator\WC_Bulk_Product_Export(); 171 $this->order_import = new \WcBulkOrderGenerator\WC_Bulk_Order_Import(); 172 $this->product_import = new \WcBulkOrderGenerator\WC_Bulk_Product_Import(); 173 $this->bulk_delete = new \WcBulkOrderGenerator\WC_Bulk_Delete(); 174 } 175 176 176 177 177 /** … … 189 189 190 190 /** 191 * Registers plugin settings for the WC Bulk Order Generator.191 * Registers plugin settings for the Bulk Order & Product Generator, Import Export for WooCommerce. 192 192 * 193 193 * This function registers the plugin's settings using the WordPress Settings API. … … 273 273 printf( 274 274 esc_html__('WooCommerce is not installed or active. %1$s may not work correctly.', 'wc-bulk-order-generator'), 275 '<strong>' . esc_html__(' WC Bulk Order Generator', 'wc-bulk-order-generator') . '</strong>'275 '<strong>' . esc_html__('Bulk Order & Product Generator, Import Export for WooCommerce', 'wc-bulk-order-generator') . '</strong>' 276 276 ); 277 277 ?> … … 346 346 /** 347 347 * Adds a submenu page for the Bulk Order Generator under the WooCommerce menu. 348 * Also adds it to Shop Explorer menu if that plugin is active. 348 349 * 349 350 * This function adds the "Bulk Generator" page to the WooCommerce menu, allowing administrators 350 351 * to access the bulk order generation interface from the WordPress admin dashboard. 352 * If Shop Explorer plugin is active, it also adds the menu there. 351 353 * 352 354 * @return void 353 355 */ 354 356 public function add_admin_menu() { 357 // Add submenu under WooCommerce 355 358 add_submenu_page( 356 359 'woocommerce', … … 361 364 array($this, 'admin_page') 362 365 ); 366 367 // Check if Shop Explorer plugin is active and add submenu there too 368 if ($this->is_shop_explorer_active()) { 369 add_submenu_page( 370 'shop-explorer', 371 esc_html__('Bulk Generator', 'wc-bulk-order-generator'), 372 esc_html__('Bulk Generator', 'wc-bulk-order-generator'), 373 'manage_woocommerce', 374 'wc-order-generator', 375 array($this, 'admin_page') 376 ); 377 } 378 } 379 380 /** 381 * Check if Shop Explorer plugin is active. 382 * 383 * @return bool True if Shop Explorer is active, false otherwise. 384 */ 385 private function is_shop_explorer_active() { 386 // Check if the Shop Explorer plugin is active 387 if (!function_exists('is_plugin_active')) { 388 include_once(ABSPATH . 'wp-admin/includes/plugin.php'); 389 } 390 391 // Check for Shop Explorer plugin - adjust the plugin path as needed 392 return is_plugin_active('shop-explorer/shop-explorer.php') || 393 is_plugin_active('shop-explorer.php') || 394 class_exists('ShopExplorer') || 395 defined('SHOP_EXPLORER_VERSION'); 363 396 } 364 397 … … 457 490 </div> 458 491 </div> 492 493 <!-- Use Random Images Checkbox --> 494 <div class="setting-card"> 495 <label><?php esc_html_e('Product Images', 'wc-bulk-order-generator'); ?></label> 496 <div class="product-type-options"> 497 <label class="product-type-checkbox"> 498 <input type="checkbox" id="use_random_images" name="use_random_images" value="1"> 499 <?php esc_html_e('Generate Product Images', 'wc-bulk-order-generator'); ?> 500 <span class="checkmark"></span> 501 </label> 502 </div> 503 <p class="description"> 504 <?php esc_html_e('Enable to generate product images. This may increase processing time.', 'wc-bulk-order-generator'); ?> 505 </p> 506 </div> 459 507 </div> 460 508 … … 742 790 <tr> 743 791 <th scope="row"> 744 <label for="import-csv"><?php esc_html_e('CSV File', 'wc-bulk-order- importer'); ?></label>792 <label for="import-csv"><?php esc_html_e('CSV File', 'wc-bulk-order-generator'); ?></label> 745 793 </th> 746 794 <td> … … 759 807 </div> 760 808 </div> 761 <p class="description"><?php esc_html_e('Upload a CSV file with order details', 'wc-bulk-order- importer'); ?></p>809 <p class="description"><?php esc_html_e('Upload a CSV file with order details', 'wc-bulk-order-generator'); ?></p> 762 810 <div class="file-upload-validation"> 763 <small><?php esc_html_e('Accepted: .csv | 50MB only | Use only WC Bulk Generator CSV', 'wc-bulk-order- importer'); ?></small>811 <small><?php esc_html_e('Accepted: .csv | 50MB only | Use only WC Bulk Generator CSV', 'wc-bulk-order-generator'); ?></small> 764 812 </div> 765 813 </td> … … 767 815 <tr> 768 816 <th scope="row"> 769 <label for="import-batch-size"><?php esc_html_e('Batch Size', 'wc-bulk-order- importer'); ?></label>817 <label for="import-batch-size"><?php esc_html_e('Batch Size', 'wc-bulk-order-generator'); ?></label> 770 818 </th> 771 819 <td> 772 820 <input type="number" id="import-batch-size" name="batch_size" 773 821 value="10" min="5" max="30"> 774 <p class="description"><?php esc_html_e('Number of orders to process per batch (5-30)', 'wc-bulk-order- importer'); ?></p>822 <p class="description"><?php esc_html_e('Number of orders to process per batch (5-30)', 'wc-bulk-order-generator'); ?></p> 775 823 <div class="poc-note"> 776 824 <p><strong><?php esc_html_e('Note:', 'wc-bulk-order-generator'); ?></strong> … … 811 859 812 860 <p class="submit"> 813 <input type="submit" class="button button-primary" value="<?php esc_attr_e('Import Orders', 'wc-bulk-order- importer'); ?>">861 <input type="submit" class="button button-primary" value="<?php esc_attr_e('Import Orders', 'wc-bulk-order-generator'); ?>"> 814 862 <button type="button" id="reset-order-import" class="button button-secondary"><?php esc_html_e('Reset', 'wc-bulk-order-generator'); ?></button> 815 863 </p> … … 832 880 <tr> 833 881 <th scope="row"> 834 <label for="product-import-csv"><?php esc_html_e('CSV File', 'wc-bulk- product-importer'); ?></label>882 <label for="product-import-csv"><?php esc_html_e('CSV File', 'wc-bulk-order-generator'); ?></label> 835 883 </th> 836 884 <td> … … 849 897 </div> 850 898 </div> 851 <p class="description"><?php esc_html_e('Upload a CSV file with product details', 'wc-bulk- product-importer'); ?></p>899 <p class="description"><?php esc_html_e('Upload a CSV file with product details', 'wc-bulk-order-generator'); ?></p> 852 900 <div class="file-upload-validation"> 853 <small><?php esc_html_e('Accepted: .csv | 50MB only | Use only WC Bulk Generator CSV ', 'wc-bulk- product-importer'); ?></small>901 <small><?php esc_html_e('Accepted: .csv | 50MB only | Use only WC Bulk Generator CSV ', 'wc-bulk-order-generator'); ?></small> 854 902 </div> 855 903 </td> … … 857 905 <tr> 858 906 <th scope="row"> 859 <label for="product-import-batch-size"><?php esc_html_e('Batch Size', 'wc-bulk- product-importer'); ?></label>907 <label for="product-import-batch-size"><?php esc_html_e('Batch Size', 'wc-bulk-order-generator'); ?></label> 860 908 </th> 861 909 <td> 862 910 <input type="number" id="product-import-batch-size" name="batch_size" 863 911 value="10" min="5" max="30"> 864 <p class="description"><?php esc_html_e('Number of products to process per batch (5-30)', 'wc-bulk- product-importer'); ?></p>912 <p class="description"><?php esc_html_e('Number of products to process per batch (5-30)', 'wc-bulk-order-generator'); ?></p> 865 913 866 914 <div class="poc-note"> … … 879 927 <div class="stats-grid"> 880 928 <div class="stat-card"> 881 <div class="stat-value" id="product-import-total-processed"><?php esc_html_e('0', 'wc-bulk- product-importer'); ?></div>882 <div class="stat-label"><?php esc_html_e('Total Processed', 'wc-bulk- product-importer'); ?></div>883 </div> 884 <div class="stat-card"> 885 <div class="stat-value" id="product-import-success-count"><?php esc_html_e('0', 'wc-bulk- product-importer'); ?></div>886 <div class="stat-label"><?php esc_html_e('Successful', 'wc-bulk- product-importer'); ?></div>887 </div> 888 <div class="stat-card"> 889 <div class="stat-value" id="product-import-failed-count"><?php esc_html_e('0', 'wc-bulk- product-importer'); ?></div>890 <div class="stat-label"><?php esc_html_e('Failed', 'wc-bulk- product-importer'); ?></div>891 </div> 892 <div class="stat-card"> 893 <div class="stat-value" id="product-import-skipped-count"><?php esc_html_e('0', 'wc-bulk- product-importer'); ?></div>894 <div class="stat-label"><?php esc_html_e('Skipped', 'wc-bulk- product-importer'); ?></div>895 </div> 896 <div class="stat-card"> 897 <div class="stat-value" id="product-import-elapsed-time"><?php esc_html_e('0s', 'wc-bulk- product-importer'); ?></div>898 <div class="stat-label"><?php esc_html_e('Elapsed Time', 'wc-bulk- product-importer'); ?></div>929 <div class="stat-value" id="product-import-total-processed"><?php esc_html_e('0', 'wc-bulk-order-generator'); ?></div> 930 <div class="stat-label"><?php esc_html_e('Total Processed', 'wc-bulk-order-generator'); ?></div> 931 </div> 932 <div class="stat-card"> 933 <div class="stat-value" id="product-import-success-count"><?php esc_html_e('0', 'wc-bulk-order-generator'); ?></div> 934 <div class="stat-label"><?php esc_html_e('Successful', 'wc-bulk-order-generator'); ?></div> 935 </div> 936 <div class="stat-card"> 937 <div class="stat-value" id="product-import-failed-count"><?php esc_html_e('0', 'wc-bulk-order-generator'); ?></div> 938 <div class="stat-label"><?php esc_html_e('Failed', 'wc-bulk-order-generator'); ?></div> 939 </div> 940 <div class="stat-card"> 941 <div class="stat-value" id="product-import-skipped-count"><?php esc_html_e('0', 'wc-bulk-order-generator'); ?></div> 942 <div class="stat-label"><?php esc_html_e('Skipped', 'wc-bulk-order-generator'); ?></div> 943 </div> 944 <div class="stat-card"> 945 <div class="stat-value" id="product-import-elapsed-time"><?php esc_html_e('0s', 'wc-bulk-order-generator'); ?></div> 946 <div class="stat-label"><?php esc_html_e('Elapsed Time', 'wc-bulk-order-generator'); ?></div> 899 947 </div> 900 948 </div> … … 903 951 904 952 <p class="submit"> 905 <input type="submit" class="button button-primary" value="<?php esc_attr_e('Import Products', 'wc-bulk- product-importer'); ?>">906 <button type="button" id="reset-product-import" class="button button-secondary"><?php esc_html_e('Reset', 'wc-bulk- product-importer'); ?></button>953 <input type="submit" class="button button-primary" value="<?php esc_attr_e('Import Products', 'wc-bulk-order-generator'); ?>"> 954 <button type="button" id="reset-product-import" class="button button-secondary"><?php esc_html_e('Reset', 'wc-bulk-order-generator'); ?></button> 907 955 </p> 908 956 </form> … … 1341 1389 1342 1390 /** 1343 * Initializes the WC Bulk Order Generatorplugin.1391 * Initializes the Bulk Order & Product Generator, Import Export for WooCommerce plugin. 1344 1392 * 1345 1393 * This function is called when the plugins are loaded in WordPress. It initializes the `WC_Bulk_Order_Generator`
Note: See TracChangeset
for help on using the changeset viewer.