Changeset 2977226
- Timestamp:
- 10/10/2023 09:41:46 PM (2 years ago)
- Location:
- activecampaign-for-woocommerce
- Files:
-
- 5 deleted
- 17 edited
- 117 copied
-
tags/2.4.8 (copied) (copied from activecampaign-for-woocommerce/trunk)
-
tags/2.4.8/CHANGELOG.txt (copied) (copied from activecampaign-for-woocommerce/trunk/CHANGELOG.txt)
-
tags/2.4.8/README.txt (copied) (copied from activecampaign-for-woocommerce/trunk/README.txt) (2 diffs)
-
tags/2.4.8/ac_vendor (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor)
-
tags/2.4.8/ac_vendor/autoload.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/autoload.php) (1 diff)
-
tags/2.4.8/ac_vendor/brick/math/src/BigDecimal.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/math/src/BigDecimal.php)
-
tags/2.4.8/ac_vendor/brick/math/src/BigInteger.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/math/src/BigInteger.php)
-
tags/2.4.8/ac_vendor/brick/math/src/BigNumber.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/math/src/BigNumber.php)
-
tags/2.4.8/ac_vendor/brick/math/src/BigRational.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/math/src/BigRational.php)
-
tags/2.4.8/ac_vendor/brick/math/src/Internal/Calculator.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/math/src/Internal/Calculator.php)
-
tags/2.4.8/ac_vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php)
-
tags/2.4.8/ac_vendor/brick/math/src/Internal/Calculator/NativeCalculator.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/math/src/Internal/Calculator/NativeCalculator.php)
-
tags/2.4.8/ac_vendor/brick/money/data/country-to-currency.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/data/country-to-currency.php)
-
tags/2.4.8/ac_vendor/brick/money/data/iso-currencies.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/data/iso-currencies.php)
-
tags/2.4.8/ac_vendor/brick/money/data/numeric-to-currency.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/data/numeric-to-currency.php)
-
tags/2.4.8/ac_vendor/brick/money/src/AbstractMoney.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/AbstractMoney.php)
-
tags/2.4.8/ac_vendor/brick/money/src/Context/CashContext.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/Context/CashContext.php)
-
tags/2.4.8/ac_vendor/brick/money/src/Context/CustomContext.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/Context/CustomContext.php)
-
tags/2.4.8/ac_vendor/brick/money/src/Currency.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/Currency.php)
-
tags/2.4.8/ac_vendor/brick/money/src/CurrencyConverter.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/CurrencyConverter.php)
-
tags/2.4.8/ac_vendor/brick/money/src/Exception/CurrencyConversionException.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/Exception/CurrencyConversionException.php)
-
tags/2.4.8/ac_vendor/brick/money/src/ExchangeRateProvider/BaseCurrencyProvider.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/ExchangeRateProvider/BaseCurrencyProvider.php)
-
tags/2.4.8/ac_vendor/brick/money/src/ExchangeRateProvider/CachedProvider.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/ExchangeRateProvider/CachedProvider.php)
-
tags/2.4.8/ac_vendor/brick/money/src/ExchangeRateProvider/ConfigurableProvider.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/ExchangeRateProvider/ConfigurableProvider.php)
-
tags/2.4.8/ac_vendor/brick/money/src/ExchangeRateProvider/PDOProvider.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/ExchangeRateProvider/PDOProvider.php)
-
tags/2.4.8/ac_vendor/brick/money/src/ExchangeRateProvider/PDOProviderConfiguration.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/ExchangeRateProvider/PDOProviderConfiguration.php)
-
tags/2.4.8/ac_vendor/brick/money/src/ExchangeRateProvider/ProviderChain.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/ExchangeRateProvider/ProviderChain.php)
-
tags/2.4.8/ac_vendor/brick/money/src/ISOCurrencyProvider.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/ISOCurrencyProvider.php)
-
tags/2.4.8/ac_vendor/brick/money/src/Money.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/Money.php)
-
tags/2.4.8/ac_vendor/brick/money/src/MoneyBag.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/MoneyBag.php)
-
tags/2.4.8/ac_vendor/brick/money/src/MoneyComparator.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/MoneyComparator.php)
-
tags/2.4.8/ac_vendor/brick/money/src/RationalMoney.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/brick/money/src/RationalMoney.php)
-
tags/2.4.8/ac_vendor/composer/ClassLoader.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/composer/ClassLoader.php)
-
tags/2.4.8/ac_vendor/composer/InstalledVersions.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/composer/InstalledVersions.php)
-
tags/2.4.8/ac_vendor/composer/autoload_classmap.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/composer/autoload_classmap.php)
-
tags/2.4.8/ac_vendor/composer/autoload_psr4.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/composer/autoload_psr4.php)
-
tags/2.4.8/ac_vendor/composer/autoload_real.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/composer/autoload_real.php) (5 diffs)
-
tags/2.4.8/ac_vendor/composer/autoload_static.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/composer/autoload_static.php) (2 diffs)
-
tags/2.4.8/ac_vendor/composer/installed.json (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/composer/installed.json)
-
tags/2.4.8/ac_vendor/composer/installed.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/composer/installed.php)
-
tags/2.4.8/ac_vendor/composer/platform_check.php (copied) (copied from activecampaign-for-woocommerce/trunk/ac_vendor/composer/platform_check.php)
-
tags/2.4.8/activecampaign-for-woocommerce.php (copied) (copied from activecampaign-for-woocommerce/trunk/activecampaign-for-woocommerce.php) (1 diff)
-
tags/2.4.8/admin/class-activecampaign-for-woocommerce-admin-historical-sync.php (copied) (copied from activecampaign-for-woocommerce/trunk/admin/class-activecampaign-for-woocommerce-admin-historical-sync.php)
-
tags/2.4.8/admin/class-activecampaign-for-woocommerce-admin-product-sync.php (copied) (copied from activecampaign-for-woocommerce/trunk/admin/class-activecampaign-for-woocommerce-admin-product-sync.php)
-
tags/2.4.8/admin/class-activecampaign-for-woocommerce-admin-settings-validator.php (copied) (copied from activecampaign-for-woocommerce/trunk/admin/class-activecampaign-for-woocommerce-admin-settings-validator.php)
-
tags/2.4.8/admin/class-activecampaign-for-woocommerce-admin-status.php (copied) (copied from activecampaign-for-woocommerce/trunk/admin/class-activecampaign-for-woocommerce-admin-status.php)
-
tags/2.4.8/admin/class-activecampaign-for-woocommerce-admin-wc-order-page.php (copied) (copied from activecampaign-for-woocommerce/trunk/admin/class-activecampaign-for-woocommerce-admin-wc-order-page.php)
-
tags/2.4.8/admin/class-activecampaign-for-woocommerce-admin.php (copied) (copied from activecampaign-for-woocommerce/trunk/admin/class-activecampaign-for-woocommerce-admin.php)
-
tags/2.4.8/admin/partials/activecampaign-for-woocommerce-connections.php (copied) (copied from activecampaign-for-woocommerce/trunk/admin/partials/activecampaign-for-woocommerce-connections.php)
-
tags/2.4.8/admin/partials/activecampaign-for-woocommerce-header.php (copied) (copied from activecampaign-for-woocommerce/trunk/admin/partials/activecampaign-for-woocommerce-header.php)
-
tags/2.4.8/admin/partials/activecampaign-for-woocommerce-order-meta.php (copied) (copied from activecampaign-for-woocommerce/trunk/admin/partials/activecampaign-for-woocommerce-order-meta.php)
-
tags/2.4.8/admin/trait-activecampaign-for-woocommerce-admin-connections.php (copied) (copied from activecampaign-for-woocommerce/trunk/admin/trait-activecampaign-for-woocommerce-admin-connections.php)
-
tags/2.4.8/admin/trait-activecampaign-for-woocommerce-admin-utilities.php (copied) (copied from activecampaign-for-woocommerce/trunk/admin/trait-activecampaign-for-woocommerce-admin-utilities.php)
-
tags/2.4.8/admin/views/activecampaign-for-woocommerce-abandoned-cart-display.php (copied) (copied from activecampaign-for-woocommerce/trunk/admin/views/activecampaign-for-woocommerce-abandoned-cart-display.php)
-
tags/2.4.8/admin/views/activecampaign-for-woocommerce-admin-display.php (copied) (copied from activecampaign-for-woocommerce/trunk/admin/views/activecampaign-for-woocommerce-admin-display.php)
-
tags/2.4.8/admin/views/activecampaign-for-woocommerce-status-display.php (copied) (copied from activecampaign-for-woocommerce/trunk/admin/views/activecampaign-for-woocommerce-status-display.php)
-
tags/2.4.8/includes/abandoned_carts/class-activecampaign-for-woocommerce-abandoned-cart-utilities.php (deleted)
-
tags/2.4.8/includes/abandoned_carts/class-activecampaign-for-woocommerce-cart-events.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/abandoned_carts/class-activecampaign-for-woocommerce-cart-events.php)
-
tags/2.4.8/includes/abandoned_carts/class-activecampaign-for-woocommerce-run-abandonment-sync-command.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/abandoned_carts/class-activecampaign-for-woocommerce-run-abandonment-sync-command.php)
-
tags/2.4.8/includes/abandoned_carts/class-activecampaign-for-woocommerce-save-abandoned-cart-command.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/abandoned_carts/class-activecampaign-for-woocommerce-save-abandoned-cart-command.php)
-
tags/2.4.8/includes/abandoned_carts/class-activecampaign-for-woocommerce-sync-guest-abandoned-cart-command.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/abandoned_carts/class-activecampaign-for-woocommerce-sync-guest-abandoned-cart-command.php)
-
tags/2.4.8/includes/abandoned_carts/trait-activecampaign-for-woocommerce-abandoned-cart-utilities.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/abandoned_carts/trait-activecampaign-for-woocommerce-abandoned-cart-utilities.php)
-
tags/2.4.8/includes/api-client/class-activecampaign-for-woocommerce-api-client.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/api-client/class-activecampaign-for-woocommerce-api-client.php)
-
tags/2.4.8/includes/class-activecampaign-for-woocommerce-activator.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/class-activecampaign-for-woocommerce-activator.php)
-
tags/2.4.8/includes/class-activecampaign-for-woocommerce-logger.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/class-activecampaign-for-woocommerce-logger.php)
-
tags/2.4.8/includes/class-activecampaign-for-woocommerce-plugin-upgrade.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/class-activecampaign-for-woocommerce-plugin-upgrade.php)
-
tags/2.4.8/includes/class-activecampaign-for-woocommerce-utilities.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/class-activecampaign-for-woocommerce-utilities.php)
-
tags/2.4.8/includes/class-activecampaign-for-woocommerce.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/class-activecampaign-for-woocommerce.php)
-
tags/2.4.8/includes/commands/class-activecampaign-for-woocommerce-add-accepts-marketing-to-customer-meta-command.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/commands/class-activecampaign-for-woocommerce-add-accepts-marketing-to-customer-meta-command.php)
-
tags/2.4.8/includes/commands/class-activecampaign-for-woocommerce-add-cart-id-to-order-command.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/commands/class-activecampaign-for-woocommerce-add-cart-id-to-order-command.php)
-
tags/2.4.8/includes/commands/class-activecampaign-for-woocommerce-create-and-save-cart-id-command.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/commands/class-activecampaign-for-woocommerce-create-and-save-cart-id-command.php)
-
tags/2.4.8/includes/commands/class-activecampaign-for-woocommerce-create-or-update-connection-option-command.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/commands/class-activecampaign-for-woocommerce-create-or-update-connection-option-command.php)
-
tags/2.4.8/includes/commands/class-activecampaign-for-woocommerce-plugin-upgrade-command.php (deleted)
-
tags/2.4.8/includes/commands/class-activecampaign-for-woocommerce-set-connection-id-cache-command.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/commands/class-activecampaign-for-woocommerce-set-connection-id-cache-command.php)
-
tags/2.4.8/includes/commands/class-activecampaign-for-woocommerce-uninstall-plugin-command.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/commands/class-activecampaign-for-woocommerce-uninstall-plugin-command.php)
-
tags/2.4.8/includes/commands/class-activecampaign-for-woocommerce-update-cart-command.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/commands/class-activecampaign-for-woocommerce-update-cart-command.php)
-
tags/2.4.8/includes/config/activecampaign-for-woocommerce-bootstrap.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/config/activecampaign-for-woocommerce-bootstrap.php)
-
tags/2.4.8/includes/config/activecampaign-for-woocommerce-class-factories.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/config/activecampaign-for-woocommerce-class-factories.php)
-
tags/2.4.8/includes/config/activecampaign-for-woocommerce-global-constants.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/config/activecampaign-for-woocommerce-global-constants.php) (1 diff)
-
tags/2.4.8/includes/customers/class-activecampaign-for-woocommerce-customer-utilities.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/customers/class-activecampaign-for-woocommerce-customer-utilities.php)
-
tags/2.4.8/includes/events/class-activecampaign-for-woocommerce-cart-emptied-event.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/events/class-activecampaign-for-woocommerce-cart-emptied-event.php)
-
tags/2.4.8/includes/events/class-activecampaign-for-woocommerce-cart-updated-event.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/events/class-activecampaign-for-woocommerce-cart-updated-event.php)
-
tags/2.4.8/includes/events/class-activecampaign-for-woocommerce-user-registered-event.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/events/class-activecampaign-for-woocommerce-user-registered-event.php)
-
tags/2.4.8/includes/models/class-activecampaign-for-woocommerce-ac-contact.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/models/class-activecampaign-for-woocommerce-ac-contact.php)
-
tags/2.4.8/includes/models/class-activecampaign-for-woocommerce-cofe-ecom-order-line-item.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/models/class-activecampaign-for-woocommerce-cofe-ecom-order-line-item.php)
-
tags/2.4.8/includes/models/class-activecampaign-for-woocommerce-cofe-ecom-order.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/models/class-activecampaign-for-woocommerce-cofe-ecom-order.php)
-
tags/2.4.8/includes/models/class-activecampaign-for-woocommerce-connection.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/models/class-activecampaign-for-woocommerce-connection.php)
-
tags/2.4.8/includes/models/class-activecampaign-for-woocommerce-ecom-address.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/models/class-activecampaign-for-woocommerce-ecom-address.php)
-
tags/2.4.8/includes/models/class-activecampaign-for-woocommerce-ecom-customer.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/models/class-activecampaign-for-woocommerce-ecom-customer.php)
-
tags/2.4.8/includes/models/class-activecampaign-for-woocommerce-ecom-discount.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/models/class-activecampaign-for-woocommerce-ecom-discount.php)
-
tags/2.4.8/includes/models/class-activecampaign-for-woocommerce-ecom-order.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/models/class-activecampaign-for-woocommerce-ecom-order.php)
-
tags/2.4.8/includes/models/factories/class-activecampaign-for-woocommerce-ecom-order-factory.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/models/factories/class-activecampaign-for-woocommerce-ecom-order-factory.php)
-
tags/2.4.8/includes/models/factories/class-activecampaign-for-woocommerce-ecom-product-factory.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/models/factories/class-activecampaign-for-woocommerce-ecom-product-factory.php)
-
tags/2.4.8/includes/models/serializers/class-activecampaign-for-woocommerce-ecom-cofe-product-serializer.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/models/serializers/class-activecampaign-for-woocommerce-ecom-cofe-product-serializer.php) (1 diff)
-
tags/2.4.8/includes/models/serializers/class-activecampaign-for-woocommerce-simple-graphql-serializer.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/models/serializers/class-activecampaign-for-woocommerce-simple-graphql-serializer.php)
-
tags/2.4.8/includes/orders/class-activecampaign-for-woocommerce-cofe-order-builder.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/orders/class-activecampaign-for-woocommerce-cofe-order-builder.php)
-
tags/2.4.8/includes/orders/class-activecampaign-for-woocommerce-new-order-created-event.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/orders/class-activecampaign-for-woocommerce-new-order-created-event.php)
-
tags/2.4.8/includes/orders/class-activecampaign-for-woocommerce-new-order-sync-job.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/orders/class-activecampaign-for-woocommerce-new-order-sync-job.php)
-
tags/2.4.8/includes/orders/class-activecampaign-for-woocommerce-order-action-events.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/orders/class-activecampaign-for-woocommerce-order-action-events.php)
-
tags/2.4.8/includes/orders/class-activecampaign-for-woocommerce-order-utilities.php (deleted)
-
tags/2.4.8/includes/orders/class-activecampaign-for-woocommerce-synced-status-interface.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/orders/class-activecampaign-for-woocommerce-synced-status-interface.php)
-
tags/2.4.8/includes/orders/historical/class-activecampaign-for-woocommerce-historical-sync-contacts.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/orders/historical/class-activecampaign-for-woocommerce-historical-sync-contacts.php)
-
tags/2.4.8/includes/orders/historical/class-activecampaign-for-woocommerce-historical-sync-handler.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/orders/historical/class-activecampaign-for-woocommerce-historical-sync-handler.php)
-
tags/2.4.8/includes/orders/historical/class-activecampaign-for-woocommerce-historical-sync-prep.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/orders/historical/class-activecampaign-for-woocommerce-historical-sync-prep.php)
-
tags/2.4.8/includes/orders/historical/class-activecampaign-for-woocommerce-historical-sync-runner-cofe.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/orders/historical/class-activecampaign-for-woocommerce-historical-sync-runner-cofe.php)
-
tags/2.4.8/includes/orders/historical/class-activecampaign-for-woocommerce-historical-sync-runner.php (deleted)
-
tags/2.4.8/includes/orders/historical/trait-activecampaign-for-woocommerce-historical-utilities.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/orders/historical/trait-activecampaign-for-woocommerce-historical-utilities.php)
-
tags/2.4.8/includes/orders/trait-activecampaign-for-woocommerce-contact-data-handler.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/orders/trait-activecampaign-for-woocommerce-contact-data-handler.php)
-
tags/2.4.8/includes/orders/trait-activecampaign-for-woocommerce-order-data-gathering.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/orders/trait-activecampaign-for-woocommerce-order-data-gathering.php)
-
tags/2.4.8/includes/orders/trait-activecampaign-for-woocommerce-order-line-item-gathering.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/orders/trait-activecampaign-for-woocommerce-order-line-item-gathering.php)
-
tags/2.4.8/includes/orders/trait-activecampaign-for-woocommerce-synced-status-handler.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/orders/trait-activecampaign-for-woocommerce-synced-status-handler.php)
-
tags/2.4.8/includes/products/class-activecampaign-for-woocommerce-product-sync-job.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/products/class-activecampaign-for-woocommerce-product-sync-job.php)
-
tags/2.4.8/includes/repositories/class-activecampaign-for-woocommerce-cofe-order-repository.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/repositories/class-activecampaign-for-woocommerce-cofe-order-repository.php)
-
tags/2.4.8/includes/repositories/class-activecampaign-for-woocommerce-ecom-customer-repository.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/repositories/class-activecampaign-for-woocommerce-ecom-customer-repository.php)
-
tags/2.4.8/includes/repositories/class-activecampaign-for-woocommerce-product-repository.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/repositories/class-activecampaign-for-woocommerce-product-repository.php)
-
tags/2.4.8/includes/services/class-activecampaign-for-woocommerce-user-meta-service.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/services/class-activecampaign-for-woocommerce-user-meta-service.php)
-
tags/2.4.8/includes/traits/class-activecampaign-for-woocommerce-api-serializable-trait.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/traits/class-activecampaign-for-woocommerce-api-serializable-trait.php)
-
tags/2.4.8/includes/traits/class-activecampaign-for-woocommerce-interacts-with-api-trait.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/traits/class-activecampaign-for-woocommerce-interacts-with-api-trait.php)
-
tags/2.4.8/includes/traits/trait-activecampaign-for-woocommerce-data-validation.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/traits/trait-activecampaign-for-woocommerce-data-validation.php)
-
tags/2.4.8/includes/traits/trait-activecampaign-for-woocommerce-global-utilities.php (copied) (copied from activecampaign-for-woocommerce/trunk/includes/traits/trait-activecampaign-for-woocommerce-global-utilities.php)
-
tags/2.4.8/public/class-activecampaign-for-woocommerce-public.php (copied) (copied from activecampaign-for-woocommerce/trunk/public/class-activecampaign-for-woocommerce-public.php) (2 diffs)
-
tags/2.4.8/vendor (deleted)
-
trunk/README.txt (modified) (2 diffs)
-
trunk/ac_vendor/autoload.php (modified) (1 diff)
-
trunk/ac_vendor/composer/autoload_real.php (modified) (5 diffs)
-
trunk/ac_vendor/composer/autoload_static.php (modified) (2 diffs)
-
trunk/activecampaign-for-woocommerce.php (modified) (1 diff)
-
trunk/admin/class-activecampaign-for-woocommerce-admin-abandoned-cart.php (modified) (2 diffs)
-
trunk/admin/class-activecampaign-for-woocommerce-admin-historical-sync.php (modified) (1 diff)
-
trunk/admin/views/activecampaign-for-woocommerce-abandoned-cart-display.php (modified) (2 diffs)
-
trunk/admin/views/activecampaign-for-woocommerce-admin-display.php (modified) (1 diff)
-
trunk/includes/abandoned_carts/class-activecampaign-for-woocommerce-run-abandonment-sync-command.php (modified) (10 diffs)
-
trunk/includes/abandoned_carts/class-activecampaign-for-woocommerce-save-abandoned-cart-command.php (modified) (1 diff)
-
trunk/includes/abandoned_carts/trait-activecampaign-for-woocommerce-abandoned-cart-utilities.php (modified) (2 diffs)
-
trunk/includes/class-activecampaign-for-woocommerce.php (modified) (2 diffs)
-
trunk/includes/config/activecampaign-for-woocommerce-global-constants.php (modified) (1 diff)
-
trunk/includes/models/class-activecampaign-for-woocommerce-ecom-order.php (modified) (1 diff)
-
trunk/includes/orders/historical/class-activecampaign-for-woocommerce-historical-sync-contacts.php (modified) (6 diffs)
-
trunk/includes/orders/historical/class-activecampaign-for-woocommerce-historical-sync-handler.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
activecampaign-for-woocommerce/tags/2.4.8/README.txt
r2973117 r2977226 4 4 Requires at least: 6.0 5 5 Tested up to: 6.3 6 Stable tag: 2.4. 76 Stable tag: 2.4.8 7 7 Requires PHP: 7.4 8 8 License: GPLv2 or later … … 83 83 84 84 == Changelog == 85 86 == 2.4.8 2023-10-06 == 87 * Workaround for custom checkouts not loading abandoned cart script 88 * Limiting extremely large numbers for ints 85 89 86 90 == 2.4.7 2023-09-29 == -
activecampaign-for-woocommerce/tags/2.4.8/ac_vendor/autoload.php
r2973117 r2977226 5 5 require_once __DIR__ . '/composer/autoload_real.php'; 6 6 7 return ComposerAutoloaderInit 1b80feeddfb6dd4ad28a709696d32324::getLoader();7 return ComposerAutoloaderInit2873218b414b46cb51cdb48bdd59ce9a::getLoader(); -
activecampaign-for-woocommerce/tags/2.4.8/ac_vendor/composer/autoload_real.php
r2973117 r2977226 3 3 // autoload_real.php @generated by Composer 4 4 5 class ComposerAutoloaderInit 1b80feeddfb6dd4ad28a709696d323245 class ComposerAutoloaderInit2873218b414b46cb51cdb48bdd59ce9a 6 6 { 7 7 private static $loader; … … 25 25 require __DIR__ . '/platform_check.php'; 26 26 27 spl_autoload_register(array('ComposerAutoloaderInit 1b80feeddfb6dd4ad28a709696d32324', 'loadClassLoader'), true, true);27 spl_autoload_register(array('ComposerAutoloaderInit2873218b414b46cb51cdb48bdd59ce9a', 'loadClassLoader'), true, true); 28 28 self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); 29 spl_autoload_unregister(array('ComposerAutoloaderInit 1b80feeddfb6dd4ad28a709696d32324', 'loadClassLoader'));29 spl_autoload_unregister(array('ComposerAutoloaderInit2873218b414b46cb51cdb48bdd59ce9a', 'loadClassLoader')); 30 30 31 31 $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); … … 33 33 require __DIR__ . '/autoload_static.php'; 34 34 35 call_user_func(\Composer\Autoload\ComposerStaticInit 1b80feeddfb6dd4ad28a709696d32324::getInitializer($loader));35 call_user_func(\Composer\Autoload\ComposerStaticInit2873218b414b46cb51cdb48bdd59ce9a::getInitializer($loader)); 36 36 } else { 37 37 $map = require __DIR__ . '/autoload_namespaces.php'; … … 54 54 55 55 if ($useStaticLoader) { 56 $includeFiles = Composer\Autoload\ComposerStaticInit 1b80feeddfb6dd4ad28a709696d32324::$files;56 $includeFiles = Composer\Autoload\ComposerStaticInit2873218b414b46cb51cdb48bdd59ce9a::$files; 57 57 } else { 58 58 $includeFiles = require __DIR__ . '/autoload_files.php'; 59 59 } 60 60 foreach ($includeFiles as $fileIdentifier => $file) { 61 composerRequire 1b80feeddfb6dd4ad28a709696d32324($fileIdentifier, $file);61 composerRequire2873218b414b46cb51cdb48bdd59ce9a($fileIdentifier, $file); 62 62 } 63 63 … … 66 66 } 67 67 68 function composerRequire 1b80feeddfb6dd4ad28a709696d32324($fileIdentifier, $file)68 function composerRequire2873218b414b46cb51cdb48bdd59ce9a($fileIdentifier, $file) 69 69 { 70 70 if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { -
activecampaign-for-woocommerce/tags/2.4.8/ac_vendor/composer/autoload_static.php
r2973117 r2977226 5 5 namespace Composer\Autoload; 6 6 7 class ComposerStaticInit 1b80feeddfb6dd4ad28a709696d323247 class ComposerStaticInit2873218b414b46cb51cdb48bdd59ce9a 8 8 { 9 9 public static $files = array ( … … 476 476 { 477 477 return \Closure::bind(function () use ($loader) { 478 $loader->prefixLengthsPsr4 = ComposerStaticInit 1b80feeddfb6dd4ad28a709696d32324::$prefixLengthsPsr4;479 $loader->prefixDirsPsr4 = ComposerStaticInit 1b80feeddfb6dd4ad28a709696d32324::$prefixDirsPsr4;480 $loader->classMap = ComposerStaticInit 1b80feeddfb6dd4ad28a709696d32324::$classMap;478 $loader->prefixLengthsPsr4 = ComposerStaticInit2873218b414b46cb51cdb48bdd59ce9a::$prefixLengthsPsr4; 479 $loader->prefixDirsPsr4 = ComposerStaticInit2873218b414b46cb51cdb48bdd59ce9a::$prefixDirsPsr4; 480 $loader->classMap = ComposerStaticInit2873218b414b46cb51cdb48bdd59ce9a::$classMap; 481 481 482 482 }, null, ClassLoader::class); -
activecampaign-for-woocommerce/tags/2.4.8/activecampaign-for-woocommerce.php
r2973117 r2977226 17 17 * Plugin URI: https://www.activecampaign.com/ 18 18 * Description: Add Abandoned Cart functionality to your WooCommerce store, synchronize order & customer information using ActiveCampaign. 19 * Version: 2.4. 719 * Version: 2.4.8 20 20 * WC requires at least: 7.4 21 21 * WC tested up to: 8.1.0 -
activecampaign-for-woocommerce/tags/2.4.8/includes/config/activecampaign-for-woocommerce-global-constants.php
r2973117 r2977226 26 26 */ 27 27 if ( ! defined( 'ACTIVECAMPAIGN_FOR_WOOCOMMERCE_VERSION' ) ) { 28 define( 'ACTIVECAMPAIGN_FOR_WOOCOMMERCE_VERSION', '2.4. 7' );28 define( 'ACTIVECAMPAIGN_FOR_WOOCOMMERCE_VERSION', '2.4.8' ); 29 29 } 30 30 -
activecampaign-for-woocommerce/tags/2.4.8/includes/models/serializers/class-activecampaign-for-woocommerce-ecom-cofe-product-serializer.php
r2966088 r2977226 302 302 303 303 private static function int_field( $stringy ) { 304 $int_val = intval( $stringy ); 304 if ( isset( $stringy ) && $stringy >= 2147483647 ) { 305 // Int max cap 306 $int_val = 2147483647; 307 $logger = new Logger(); 308 $logger->debug_excess( 309 'Int was too big for cofe product serializer and must be capped', 310 [ 311 'num_passed' => $stringy, 312 ] 313 ); 314 } else { 315 $int_val = intval( $stringy ); 316 } 317 305 318 if ( 0 !== $int_val ) { 306 319 return $int_val; -
activecampaign-for-woocommerce/tags/2.4.8/public/class-activecampaign-for-woocommerce-public.php
r2966088 r2977226 103 103 */ 104 104 public function enqueue_styles_scripts() { 105 if ( is_page( 'checkout') ) {105 if ( $this->better_is_checkout() ) { 106 106 $this->init(); 107 107 … … 290 290 } 291 291 } 292 293 /** 294 * Better method for checking if we are on the checkout page. 295 * 296 * @return bool 297 */ 298 private function better_is_checkout() { 299 $logger = new Logger(); 300 301 try { 302 if ( function_exists( 'is_checkout' ) && is_checkout() ) { 303 return true; 304 } 305 306 $checkout_path = wp_parse_url( wc_get_checkout_url(), PHP_URL_PATH ); 307 if ( isset( $_SERVER['HTTP_HOST'], $_SERVER['REQUEST_URI'] ) ) { 308 $host_name = esc_url_raw( wp_unslash( $_SERVER['HTTP_HOST'] ) . wp_unslash( $_SERVER['REQUEST_URI'] ) ); 309 } else { 310 $host_name = ''; 311 } 312 313 $current_url_path = wp_parse_url( "http://$host_name", PHP_URL_PATH ); 314 315 if ( 316 ( 317 null !== $checkout_path && 318 null !== $current_url_path && 319 trailingslashit( $checkout_path ) === trailingslashit( $current_url_path ) 320 ) || 321 is_page( 'checkout' ) 322 ) { 323 324 return true; 325 } 326 } catch ( Throwable $t ) { 327 328 $logger->warning( 329 'There may be an issue checking for the checkout page', 330 [ 331 'message' => $t->getMessage(), 332 ] 333 ); 334 } 335 336 return false; 337 } 292 338 } -
activecampaign-for-woocommerce/trunk/README.txt
r2975700 r2977226 4 4 Requires at least: 6.0 5 5 Tested up to: 6.3 6 Stable tag: 2.4. 86 Stable tag: 2.4.9 7 7 Requires PHP: 7.4 8 8 License: GPLv2 or later … … 84 84 == Changelog == 85 85 86 == 2.4.9 2023-10-09 == 87 * Fixing the abandoned cart starter times 88 * Adding more clear text for abandoned cart settings 89 86 90 == 2.4.8 2023-10-06 == 87 91 * Workaround for custom checkouts not loading abandoned cart script -
activecampaign-for-woocommerce/trunk/ac_vendor/autoload.php
r2975700 r2977226 5 5 require_once __DIR__ . '/composer/autoload_real.php'; 6 6 7 return ComposerAutoloaderInit 2873218b414b46cb51cdb48bdd59ce9a::getLoader();7 return ComposerAutoloaderInit6549c600be47fc05f98b462ebf011f67::getLoader(); -
activecampaign-for-woocommerce/trunk/ac_vendor/composer/autoload_real.php
r2975700 r2977226 3 3 // autoload_real.php @generated by Composer 4 4 5 class ComposerAutoloaderInit 2873218b414b46cb51cdb48bdd59ce9a5 class ComposerAutoloaderInit6549c600be47fc05f98b462ebf011f67 6 6 { 7 7 private static $loader; … … 25 25 require __DIR__ . '/platform_check.php'; 26 26 27 spl_autoload_register(array('ComposerAutoloaderInit 2873218b414b46cb51cdb48bdd59ce9a', 'loadClassLoader'), true, true);27 spl_autoload_register(array('ComposerAutoloaderInit6549c600be47fc05f98b462ebf011f67', 'loadClassLoader'), true, true); 28 28 self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); 29 spl_autoload_unregister(array('ComposerAutoloaderInit 2873218b414b46cb51cdb48bdd59ce9a', 'loadClassLoader'));29 spl_autoload_unregister(array('ComposerAutoloaderInit6549c600be47fc05f98b462ebf011f67', 'loadClassLoader')); 30 30 31 31 $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); … … 33 33 require __DIR__ . '/autoload_static.php'; 34 34 35 call_user_func(\Composer\Autoload\ComposerStaticInit 2873218b414b46cb51cdb48bdd59ce9a::getInitializer($loader));35 call_user_func(\Composer\Autoload\ComposerStaticInit6549c600be47fc05f98b462ebf011f67::getInitializer($loader)); 36 36 } else { 37 37 $map = require __DIR__ . '/autoload_namespaces.php'; … … 54 54 55 55 if ($useStaticLoader) { 56 $includeFiles = Composer\Autoload\ComposerStaticInit 2873218b414b46cb51cdb48bdd59ce9a::$files;56 $includeFiles = Composer\Autoload\ComposerStaticInit6549c600be47fc05f98b462ebf011f67::$files; 57 57 } else { 58 58 $includeFiles = require __DIR__ . '/autoload_files.php'; 59 59 } 60 60 foreach ($includeFiles as $fileIdentifier => $file) { 61 composerRequire 2873218b414b46cb51cdb48bdd59ce9a($fileIdentifier, $file);61 composerRequire6549c600be47fc05f98b462ebf011f67($fileIdentifier, $file); 62 62 } 63 63 … … 66 66 } 67 67 68 function composerRequire 2873218b414b46cb51cdb48bdd59ce9a($fileIdentifier, $file)68 function composerRequire6549c600be47fc05f98b462ebf011f67($fileIdentifier, $file) 69 69 { 70 70 if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { -
activecampaign-for-woocommerce/trunk/ac_vendor/composer/autoload_static.php
r2975700 r2977226 5 5 namespace Composer\Autoload; 6 6 7 class ComposerStaticInit 2873218b414b46cb51cdb48bdd59ce9a7 class ComposerStaticInit6549c600be47fc05f98b462ebf011f67 8 8 { 9 9 public static $files = array ( … … 476 476 { 477 477 return \Closure::bind(function () use ($loader) { 478 $loader->prefixLengthsPsr4 = ComposerStaticInit 2873218b414b46cb51cdb48bdd59ce9a::$prefixLengthsPsr4;479 $loader->prefixDirsPsr4 = ComposerStaticInit 2873218b414b46cb51cdb48bdd59ce9a::$prefixDirsPsr4;480 $loader->classMap = ComposerStaticInit 2873218b414b46cb51cdb48bdd59ce9a::$classMap;478 $loader->prefixLengthsPsr4 = ComposerStaticInit6549c600be47fc05f98b462ebf011f67::$prefixLengthsPsr4; 479 $loader->prefixDirsPsr4 = ComposerStaticInit6549c600be47fc05f98b462ebf011f67::$prefixDirsPsr4; 480 $loader->classMap = ComposerStaticInit6549c600be47fc05f98b462ebf011f67::$classMap; 481 481 482 482 }, null, ClassLoader::class); -
activecampaign-for-woocommerce/trunk/activecampaign-for-woocommerce.php
r2975700 r2977226 17 17 * Plugin URI: https://www.activecampaign.com/ 18 18 * Description: Add Abandoned Cart functionality to your WooCommerce store, synchronize order & customer information using ActiveCampaign. 19 * Version: 2.4. 819 * Version: 2.4.9 20 20 * WC requires at least: 7.4 21 21 * WC tested up to: 8.1.0 -
activecampaign-for-woocommerce/trunk/admin/class-activecampaign-for-woocommerce-admin-abandoned-cart.php
r2931548 r2977226 51 51 do_action( 'activecampaign_for_woocommerce_verify_tables' ); 52 52 53 $limit = 40; 54 $offset = $page * $limit; 53 $expire_time = 1; 54 $limit = 40; 55 $offset = $page * $limit; 56 $activecampaign_for_woocommerce_settings = get_option( ACTIVECAMPAIGN_FOR_WOOCOMMERCE_DB_SETTINGS_NAME ); 57 58 if ( isset( $activecampaign_for_woocommerce_settings['abcart_wait'] ) && ! empty( $activecampaign_for_woocommerce_settings['abcart_wait'] ) ) { 59 $expire_time = $activecampaign_for_woocommerce_settings['abcart_wait']; 60 } 61 62 $expire_datetime = new DateTime( 'now -' . $expire_time . ' hours', new DateTimeZone( 'UTC' ) ); 55 63 56 64 $result = $wpdb->get_results( … … 68 76 last_access_time, 69 77 activecampaignfwc_order_external_uuid, 70 cart_ref_json, 71 customer_ref_json 78 cart_ref_json, 79 customer_ref_json, 80 ( last_access_time < "' . $expire_datetime->format( 'Y-m-d H:i:s' ) . '" OR last_access_time < str_to_date("' . $expire_datetime->format( 'Y-m-d H:i:s' ) . '", "Y-m-d H:i:s") ) AS ready_state 72 81 FROM `' . $wpdb->prefix . ACTIVECAMPAIGN_FOR_WOOCOMMERCE_TABLE_NAME . '` 73 WHERE (order_date IS NULL OR abandoned_date IS NOT NULL) AND last_access_time IS NOT NULL AND ((synced_to_ac >= 20 AND synced_to_ac <= 29) OR synced_to_ac = 1 OR synced_to_ac = 0) 82 WHERE 83 (order_date IS NULL OR abandoned_date IS NOT NULL) AND 84 last_access_time IS NOT NULL AND 85 ( 86 ( 87 synced_to_ac >= 20 AND synced_to_ac <= 29 88 ) 89 OR 90 ( 91 synced_to_ac = 1 OR synced_to_ac = 0 92 ) 93 ) 74 94 LIMIT %d,%d', 75 95 [ $offset, $limit ] -
activecampaign-for-woocommerce/trunk/admin/class-activecampaign-for-woocommerce-admin-historical-sync.php
r2950993 r2977226 55 55 // Sync all the contacts from the orders 56 56 57 wp_schedule_single_event( 58 time() + 50, 59 'activecampaign_for_woocommerce_run_historical_sync_contacts' 60 ); 57 do_action( 'activecampaign_for_woocommerce_run_historical_sync_contacts' ); 58 61 59 update_option( 62 60 ACTIVECAMPAIGN_FOR_WOOCOMMERCE_HISTORICAL_SYNC_SCHEDULED_STATUS_NAME, -
activecampaign-for-woocommerce/trunk/admin/views/activecampaign-for-woocommerce-abandoned-cart-display.php
r2968938 r2977226 51 51 52 52 function activecampaign_for_woocommerce_convert_date_to_local( $datetime ) { 53 return wp_date( 'Y-m-d H:i:s ', strtotime( $datetime ) ) . ' ' . wp_timezone_string();53 return wp_date( 'Y-m-d H:i:s e', strtotime( $datetime ) ); 54 54 } 55 55 /** … … 245 245 ) ) : 246 246 ?> 247 Synced<br/>Abandoned On: <?php echo esc_html( $activecampaign_for_woocommerce_ab_cart->abandoned_date ); ?> 248 <?php endif; ?> 249 250 <?php if ( ( empty( $activecampaign_for_woocommerce_ab_cart->order_date ) && empty( $activecampaign_for_woocommerce_ab_cart->abandoned_date ) ) || in_array( $activecampaign_for_woocommerce_ab_cart->synced_to_ac, [ 0, 20, '0', '20' ], true ) ) : ?> 251 <?php if ( $activecampaign_for_woocommerce_ab_cart->last_access_time < $activecampaign_for_woocommerce_expire_datetime->format( 'Y-m-d H:i:s' ) ) : ?> 247 Synced<br/>Abandoned On: <?php echo esc_html( activecampaign_for_woocommerce_convert_date_to_local( $activecampaign_for_woocommerce_ab_cart->abandoned_date ) ); ?> 248 <?php endif; ?> 249 250 <?php 251 if ( 252 ( empty( $activecampaign_for_woocommerce_ab_cart->order_date ) && empty( $activecampaign_for_woocommerce_ab_cart->abandoned_date ) ) || 253 in_array( $activecampaign_for_woocommerce_ab_cart->synced_to_ac, [ 0, 20, '0', '20' ], true ) 254 ) : 255 ?> 256 <?php if ( isset( $activecampaign_for_woocommerce_ab_cart->ready_state ) && in_array( $activecampaign_for_woocommerce_ab_cart->ready_state, [ '1', 1 ], true ) ) : ?> 252 257 Abandoned Cart Ready to Sync 253 258 <?php else : ?> -
activecampaign-for-woocommerce/trunk/admin/views/activecampaign-for-woocommerce-admin-display.php
r2973117 r2977226 411 411 </h2> 412 412 <p> 413 <?php esc_html_e( 'How long should ActiveCampaign wait after a contact abandons a cart before triggering abandoned cart automations?', ACTIVECAMPAIGN_FOR_WOOCOMMERCE_LOCALIZATION_DOMAIN ); ?> 413 <?php esc_html_e( 'How long should the store will wait before considering a cart abandoned to send to ActiveCampaign?', ACTIVECAMPAIGN_FOR_WOOCOMMERCE_LOCALIZATION_DOMAIN ); ?> 414 </p> 415 <p> 416 <?php esc_html_e( 'For example a 1 hour setting would wait until 1 hour after the last activity on the cart and then queue the cart for abandoned cart sync to ActiveCampaign. This relies on a cron job that runs hourly. It may be longer before an abandoned cart goes from ready to synced depending on your cron frequency.', ACTIVECAMPAIGN_FOR_WOOCOMMERCE_LOCALIZATION_DOMAIN ); ?> 414 417 </p> 415 418 <label> -
activecampaign-for-woocommerce/trunk/includes/abandoned_carts/class-activecampaign-for-woocommerce-run-abandonment-sync-command.php
r2971988 r2977226 79 79 80 80 /** 81 * The abandoned date. 82 * 83 * @since 2.4.5 84 * @var DateTime The abandoned date. 85 */ 86 private $abandoned_date; 87 88 /** 89 * The time set in settings for expiration.. 90 * 91 * @since 2.4.5 92 * @var String|int The expiration time. 93 */ 94 private $expire_time; 95 96 /** 81 97 * Activecampaign_For_Woocommerce_Update_Cart_Command constructor. 82 98 * … … 186 202 $cart_count = $this->run_abandoned_carts(); 187 203 188 if ( ! empty( $cart_count ) && $cart_count > 0 ) {189 wp_send_json_success( 'Finished sync of abandoned cart. Processed ' . count( $cart_count ). ' carts.' );204 if ( isset( $cart_count ) && ! empty( $cart_count ) && $cart_count > 0 ) { 205 wp_send_json_success( 'Finished sync of abandoned cart. Processed ' . $cart_count . ' carts.' ); 190 206 } else { 191 207 wp_send_json_success( 'No abandoned carts to process.' ); … … 211 227 212 228 /** 213 * Forces the sync of a specific row.214 * 215 * @param int $id The row id.229 * Forces the sync of a specific abandoned cart row manually. 230 * 231 * @param int $id The abandoned cart row id. 216 232 */ 217 233 public function force_sync_row( $id ) { … … 253 269 254 270 // default is 1 hour abandon cart expiration 255 $ expire_time = 1;271 $this->expire_time = 1; 256 272 257 273 // Get the expire time period from the db … … 260 276 261 277 if ( isset( $activecampaign_for_woocommerce_settings['abcart_wait'] ) && ! empty( $activecampaign_for_woocommerce_settings['abcart_wait'] ) ) { 262 $expire_time = $activecampaign_for_woocommerce_settings['abcart_wait']; 263 } 264 265 $expire_datetime = new DateTime( 'now -' . $expire_time . ' hours', new DateTimeZone( 'UTC' ) ); 278 $this->expire_time = $activecampaign_for_woocommerce_settings['abcart_wait']; 279 } 280 281 $expire_datetime = new DateTime( 'now -' . $this->expire_time . ' hours', new DateTimeZone( 'UTC' ) ); 282 283 try { 284 // Get the expired carts from our table 285 // phpcs:disable 286 $abandoned_carts = $wpdb->get_results( ' 287 SELECT 288 id, synced_to_ac, customer_ref_json, cart_ref_json, cart_totals_ref_json, removed_cart_contents_ref_json, activecampaignfwc_order_external_uuid, last_access_time, abandoned_date, 289 ADDTIME(last_access_time, "' . $this->expire_time . ':00:00") as calc_abandoned_date 290 FROM 291 `' . $wpdb->prefix . ACTIVECAMPAIGN_FOR_WOOCOMMERCE_TABLE_NAME . '` 292 WHERE 293 ( 294 last_access_time < "' . $expire_datetime->format( 'Y-m-d H:i:s' ) . '" 295 OR last_access_time < str_to_date("' . $expire_datetime->format( 'Y-m-d H:i:s' ) . '", "Y-m-d H:i:s") 296 ) 297 AND order_date IS NULL 298 AND synced_to_ac = ' . $synced_to_ac . ';' 299 ); 300 // phpcs:enable 301 302 if ( $wpdb->last_error ) { 303 $this->logger->error( 304 'A database error was encountered while getting results for abandoned cart records.', 305 [ 306 'wpdb_last_error' => $wpdb->last_error, 307 'wpdb_last_query' => $wpdb->last_query, 308 'suggested_action' => 'Please verify that the query is correct and cron process has read access to the ' . ACTIVECAMPAIGN_FOR_WOOCOMMERCE_TABLE_NAME . ' table', 309 'ac_code' => 'RASC_301', 310 ] 311 ); 312 } 313 314 $this->clean_old_synced_abandoned_carts(); 315 $this->clean_all_old_abandoned_carts(); 316 317 if ( ! empty( $abandoned_carts ) ) { 318 return $abandoned_carts; // abandoned carts found 319 } else { 320 return false; // no abandoned carts to process 321 } 322 } catch ( Throwable $t ) { 323 $this->logger->error( 324 'An error was thrown while preparing or getting abandoned cart results.', 325 [ 326 'message' => $t->getMessage(), 327 'ac_code' => 'RASC_320', 328 'trace' => $this->logger->clean_trace( $t->getTrace() ), 329 ] 330 ); 331 } 332 } 333 334 /** 335 * Get all active carts. 336 * 337 * @deprecated This will need to be removed after a few versions as we moved from a common unsynced value of 0 to 20 for abandoned carts specifically. 338 * 339 * @return mixed Whether or not there are abandoned carts. 340 * @throws Throwable Thrown message. 341 */ 342 private function get_all_abandoned_carts_from_table_legacy() { 343 global $wpdb; 344 345 // default is 1 hour abandon cart expiration 346 $this->expire_time = 1; 347 348 // Get the expire time period from the db 349 $activecampaign_for_woocommerce_settings = get_option( ACTIVECAMPAIGN_FOR_WOOCOMMERCE_DB_SETTINGS_NAME ); 350 $activecampaign_for_woocommerce_settings = stripslashes_deep( $activecampaign_for_woocommerce_settings ); 351 352 if ( isset( $activecampaign_for_woocommerce_settings['abcart_wait'] ) && ! empty( $activecampaign_for_woocommerce_settings['abcart_wait'] ) ) { 353 $this->expire_time = $activecampaign_for_woocommerce_settings['abcart_wait']; 354 } 355 356 $expire_datetime = new DateTime( 'now -' . $this->expire_time . ' hours', new DateTimeZone( 'UTC' ) ); 266 357 267 358 try { … … 269 360 // phpcs:disable 270 361 $abandoned_carts = $wpdb->get_results( 271 'SELECT id, synced_to_ac, customer_ref_json, cart_ref_json, cart_totals_ref_json, removed_cart_contents_ref_json, activecampaignfwc_order_external_uuid, last_access_time 272 FROM 273 `' . $wpdb->prefix . ACTIVECAMPAIGN_FOR_WOOCOMMERCE_TABLE_NAME . '` 274 WHERE 275 ( last_access_time < "' . $expire_datetime->format( 'Y-m-d H:i:s' ) . '" 276 OR last_access_time < str_to_date("' . $expire_datetime->format( 'Y-m-d H:i:s' ) . '", "Y-m-d H:i:s") ) 277 AND order_date IS NULL 278 AND synced_to_ac = ' . $synced_to_ac . ';' 279 ); 280 // phpcs:enable 281 282 if ( $wpdb->last_error ) { 283 $this->logger->error( 284 'A database error was encountered while getting results for abandoned cart records.', 285 [ 286 'wpdb_last_error' => $wpdb->last_error, 287 'suggested_action' => 'Please verify that the cron process has read access to the ' . ACTIVECAMPAIGN_FOR_WOOCOMMERCE_TABLE_NAME . ' table', 288 'ac_code' => 'RASC_301', 289 ] 290 ); 291 } 292 293 $this->clean_old_synced_abandoned_carts(); 294 $this->clean_all_old_abandoned_carts(); 295 296 if ( ! empty( $abandoned_carts ) ) { 297 return $abandoned_carts; // abandoned carts found 298 } else { 299 return false; // no abandoned carts to process 300 } 301 } catch ( Throwable $t ) { 302 $this->logger->error( 303 'An error was thrown while preparing or getting abandoned cart results.', 304 [ 305 'message' => $t->getMessage(), 306 'ac_code' => 'RASC_320', 307 'trace' => $this->logger->clean_trace( $t->getTrace() ), 308 ] 309 ); 310 } 311 } 312 313 /** 314 * Get all active carts. 315 * 316 * @deprecated This will need to be removed after a few versions as we moved from a common unsynced value of 0 to 20 for abandoned carts specifically. 317 * 318 * @return mixed Whether or not there are abandoned carts. 319 * @throws Throwable Thrown message. 320 */ 321 private function get_all_abandoned_carts_from_table_legacy() { 322 global $wpdb; 323 324 // default is 1 hour abandon cart expiration 325 $expire_time = 1; 326 327 // Get the expire time period from the db 328 $activecampaign_for_woocommerce_settings = get_option( ACTIVECAMPAIGN_FOR_WOOCOMMERCE_DB_SETTINGS_NAME ); 329 $activecampaign_for_woocommerce_settings = stripslashes_deep( $activecampaign_for_woocommerce_settings ); 330 331 if ( isset( $activecampaign_for_woocommerce_settings['abcart_wait'] ) && ! empty( $activecampaign_for_woocommerce_settings['abcart_wait'] ) ) { 332 $expire_time = $activecampaign_for_woocommerce_settings['abcart_wait']; 333 } 334 335 $expire_datetime = new DateTime( 'now -' . $expire_time . ' hours', new DateTimeZone( 'UTC' ) ); 336 337 try { 338 // Get the expired carts from our table 339 // phpcs:disable 340 $abandoned_carts = $wpdb->get_results( 341 'SELECT id, synced_to_ac, customer_ref_json, cart_ref_json, cart_totals_ref_json, removed_cart_contents_ref_json, activecampaignfwc_order_external_uuid, last_access_time 362 'SELECT id, synced_to_ac, customer_ref_json, cart_ref_json, cart_totals_ref_json, removed_cart_contents_ref_json, activecampaignfwc_order_external_uuid, last_access_time, ADDTIME(last_access_time, "' . $this->expire_time . ':00:00") as calc_abandoned_date 342 363 FROM 343 364 `' . $wpdb->prefix . ACTIVECAMPAIGN_FOR_WOOCOMMERCE_TABLE_NAME . '` … … 578 599 if ( isset( $order_ac ) && ! empty( $order_ac->get_id() ) && $externalcheckout_id === $order_ac->get_externalcheckoutid() ) { 579 600 try { 580 $updated_date = new DateTime( $abc_order->last_access_time, new DateTimeZone( 'UTC' ) ); 581 $ecom_order->set_external_updated_date( $updated_date->format( DATE_ATOM ) ); 601 602 $ab_datetime = $this->calculate_abandoned_date( $abc_order ); 603 604 $ecom_order->set_external_updated_date( $ab_datetime ); 605 $ecom_order->set_external_created_date( $ab_datetime ); 606 $ecom_order->set_abandoned_date( $ab_datetime ); 607 608 $ecom_order->set_source( 0 ); 582 609 $ecom_order->set_id( $order_ac->get_id() ); 583 610 … … 619 646 ); 620 647 621 $date = new DateTime( $abc_order->last_access_time, new DateTimeZone( 'UTC' ) ); 622 $ecom_order->set_abandoned_date( $date->format( DATE_ATOM ) ); 623 $ecom_order->set_external_created_date( $date->format( DATE_ATOM ) ); 648 $ab_datetime = $this->calculate_abandoned_date( $abc_order ); 649 $ecom_order->set_abandoned_date( $ab_datetime ); 650 $ecom_order->set_external_updated_date( $ab_datetime ); 651 $ecom_order->set_external_created_date( $ab_datetime ); 624 652 625 653 $order_ac = $this->order_repository->create( $ecom_order ); … … 687 715 [ 688 716 'synced_to_ac' => self::STATUS_ABANDONED_CART_AUTO_SYNCED, 689 'abandoned_date' => $ abc_order->last_access_time,717 'abandoned_date' => $this->calculate_abandoned_date( $abc_order ), 690 718 'ac_order_id' => self::validate_object( $order_ac, 'get_id' ) ? $order_ac->get_id() : null, 691 719 'ac_customer_id' => self::validate_object( $order_ac, 'get_customerid' ) ? $order_ac->get_customerid() : null, … … 969 997 return $customer_ac; 970 998 } 999 1000 /** 1001 * Sets/Gets the abandoned sync date. This is the time when a sync is performed which should be close to the actual abandonment time. 1002 * 1003 * @param object $cart The abandoned cart object. 1004 * 1005 * @return string The date formatted. 1006 */ 1007 private function calculate_abandoned_date( $cart ) { 1008 $logger = new Logger(); 1009 1010 if ( isset( $cart->last_access_time ) && ( ! isset( $cart->abandoned_date ) || empty( $cart->abandoned_date ) ) ) { 1011 try { 1012 $now = new DateTime( 'now', new DateTimeZone( 'UTC' ) ); 1013 1014 if ( ! isset( $this->expire_time ) || empty( $this->expire_time ) ) { 1015 $this->expire_time = 1; 1016 } 1017 1018 $last_access_date = new DateTime( $cart->last_access_time, new DateTimeZone( 'UTC' ) ); 1019 $expire_datetime = new DateTime( 'now -' . $this->expire_time . ' hours', new DateTimeZone( 'UTC' ) ); 1020 $ab_date = new DateTime( $cart->last_access_time . ' + ' . $this->expire_time . ' hours', new DateTimeZone( 'UTC' ) ); 1021 1022 $diff = $expire_datetime->diff( $ab_date, true ); 1023 $i = 0 + ( $diff->days * 24 ); 1024 $i += $diff->hours; 1025 1026 // calc_abandoned_date is calculated by the DB 1027 if ( ! empty( $cart->calc_abandoned_date ) && empty( $cart->abandoned_date ) ) { 1028 $c_ab_date = new DateTime( $cart->calc_abandoned_date, new DateTimeZone( 'UTC' ) ); 1029 return $c_ab_date->format( 'Y-m-d H:i:s e' ); 1030 } elseif ( empty( $cart->calc_abandoned_date ) && empty( $cart->abandoned_date ) ) { 1031 // If the DB somehow fails to calculate the date 1032 if ( intval( $i ) >= $this->expire_time ) { 1033 // If the expiration and abandonment difference is more than the expire time 1034 return $ab_date->format( 'Y-m-d H:i:s e' ); 1035 } 1036 } 1037 1038 // If this is manually force synced and not old enough use now as the time 1039 return $now->format( 'Y-m-d H:i:s e' ); 1040 } catch ( Throwable $t ) { 1041 $logger->warning( 1042 'Could not set a date time for abandoned cart.', 1043 [ 1044 'message' => $t->getMessage(), 1045 'trace' => $t->getTrace(), 1046 ] 1047 ); 1048 } 1049 } 1050 1051 } 971 1052 } -
activecampaign-for-woocommerce/trunk/includes/abandoned_carts/class-activecampaign-for-woocommerce-save-abandoned-cart-command.php
r2960798 r2977226 274 274 'customer_first_name' => $customer_data['first_name'], 275 275 'customer_last_name' => $customer_data['last_name'], 276 'last_access_time' => $dt->format( 'Y-m-d H:i:s ' ),276 'last_access_time' => $dt->format( 'Y-m-d H:i:s e' ), 277 277 'customer_ref_json' => wp_json_encode( $customer_data, JSON_UNESCAPED_UNICODE ), 278 278 'user_ref_json' => wp_json_encode( $current_user, JSON_UNESCAPED_UNICODE ), -
activecampaign-for-woocommerce/trunk/includes/abandoned_carts/trait-activecampaign-for-woocommerce-abandoned-cart-utilities.php
r2971988 r2977226 38 38 $abandoned_cart = $wpdb->get_results( 39 39 // phpcs:disable 40 $wpdb->prepare( 'SELECT id, synced_to_ac, last_access_time, customer_ref_json, cart_ref_json, cart_totals_ref_json, removed_cart_contents_ref_json, activecampaignfwc_order_external_uuid 40 $wpdb->prepare( 'SELECT id, synced_to_ac, last_access_time, customer_ref_json, cart_ref_json, cart_totals_ref_json, removed_cart_contents_ref_json, activecampaignfwc_order_external_uuid, abandoned_date 41 41 FROM 42 42 `' . $wpdb->prefix . ACTIVECAMPAIGN_FOR_WOOCOMMERCE_TABLE_NAME . '` … … 48 48 // phpcs:enable 49 49 ); 50 51 $activecampaign_for_woocommerce_settings = get_option( ACTIVECAMPAIGN_FOR_WOOCOMMERCE_DB_SETTINGS_NAME ); 52 $activecampaign_for_woocommerce_settings = stripslashes_deep( $activecampaign_for_woocommerce_settings ); 53 54 if ( isset( $activecampaign_for_woocommerce_settings['abcart_wait'] ) && ! empty( $activecampaign_for_woocommerce_settings['abcart_wait'] ) ) { 55 $this->expire_time = $activecampaign_for_woocommerce_settings['abcart_wait']; 56 } 50 57 51 58 if ( $wpdb->last_error ) { -
activecampaign-for-woocommerce/trunk/includes/class-activecampaign-for-woocommerce.php
r2966088 r2977226 637 637 638 638 $this->loader->add_action( 639 ACTIVECAMPAIGN_FOR_WOOCOMMERCE_RUN_NEW_ORDER_SYNC_NAME, 640 $this->historical_sync, 641 'run_historical_sync_contacts', 642 6, 643 2 644 ); 645 646 $this->loader->add_action( 639 647 'activecampaign_for_woocommerce_prep_historical_data', 640 648 $this->historical_sync, … … 661 669 'activecampaign_for_woocommerce_run_historical_sync_contacts', 662 670 $this->historical_sync, 663 ' run_historical_sync_contacts',671 'prep_historical_sync_contacts', 664 672 3, 665 673 2 -
activecampaign-for-woocommerce/trunk/includes/config/activecampaign-for-woocommerce-global-constants.php
r2975700 r2977226 26 26 */ 27 27 if ( ! defined( 'ACTIVECAMPAIGN_FOR_WOOCOMMERCE_VERSION' ) ) { 28 define( 'ACTIVECAMPAIGN_FOR_WOOCOMMERCE_VERSION', '2.4. 8' );28 define( 'ACTIVECAMPAIGN_FOR_WOOCOMMERCE_VERSION', '2.4.9' ); 29 29 } 30 30 -
activecampaign-for-woocommerce/trunk/includes/models/class-activecampaign-for-woocommerce-ecom-order.php
r2966088 r2977226 456 456 /** 457 457 * Sets the source. 458 * 459 * @param string $source The source (1 or 0). 458 * 0 = historical 459 * 1 = active (will trigger automations) 460 * 461 * @param string $source The source (1=active or 0=historical). 460 462 */ 461 463 public function set_source( $source ) { -
activecampaign-for-woocommerce/trunk/includes/orders/historical/class-activecampaign-for-woocommerce-historical-sync-contacts.php
r2966088 r2977226 61 61 } 62 62 63 $this->logger->debug( 'Contact historical sync started.' );64 65 63 $this->status['contact_total'] = $wpdb->get_var( 'SELECT count(email) FROM ' . $wpdb->prefix . 'wc_customer_lookup WHERE email != "";' ); 66 64 $this->update_sync_status(); … … 69 67 $limit = 200; 70 68 $synced_contacts = 0; 69 $last_record = 0; 70 $start = get_transient( 'activecampaign_for_woocommerce_hs_contacts' ); 71 72 $this->logger->debug( 'Contact historical sync started.', [ 'start transient' => $start ] ); 73 74 if ( ! empty( $start ) ) { 75 $last_record = $start; 76 $synced_contacts = $this->status['contact_count']; 77 } 78 71 79 // phpcs:disable 72 80 wp_suspend_cache_addition(true); // Do not add to cache for session 73 81 while ( $wc_customers = $wpdb->get_results( 74 82 $wpdb->prepare( 75 'SELECT first_name, last_name, email, user_id, customer_id FROM ' . $wpdb->prefix . 'wc_customer_lookup WHERE email != "" ORDER BY customer_idLIMIT %d, %d;',76 [ $ c, $limit ]83 'SELECT first_name, last_name, email, user_id, customer_id FROM ' . $wpdb->prefix . 'wc_customer_lookup WHERE email != "" AND customer_id > %d ORDER BY customer_id ASC LIMIT %d, %d;', 84 [ $start, $c, $limit ] 77 85 ) 78 86 ) ) { … … 120 128 ); 121 129 } 122 } 123 130 131 $last_record = $wc_customer->customer_id; 132 } 133 134 // Sync the contact batch 124 135 try { 125 136 $ac_contact_batch = new AC_Contact_Batch(); … … 137 148 ); 138 149 150 if ( is_array( $response ) && isset( $response['type'] ) && 'error' === $response['type'] ) { 151 $synced_contacts -= count( $bulk_contacts ); 152 $this->status['contact_failed_count'] += count( $bulk_contacts ); 153 } 154 155 $this->status['contact_count'] = $synced_contacts; 139 156 $c += $limit; 140 $this->status['contact_count'] = $synced_contacts;141 157 $this->update_sync_status(); 142 158 143 if ( is_array( $response ) && isset( $response['type'] ) && 'error' === $response['type'] ) {144 $synced_contacts -= count( $bulk_contacts );145 146 $this->status['contact_count'] = $synced_contacts;147 $this->status['contact_failed_count'] += count( $bulk_contacts );148 }149 159 } catch ( Throwable $t ) { 150 160 $synced_contacts -= count( $bulk_contacts ); … … 157 167 ); 158 168 } 169 170 set_transient( 'activecampaign_for_woocommerce_hs_contacts', $last_record, 3600 ); 171 if ( $c > 2000 ) { 172 break; 173 } 174 } 175 176 if ( 0 === $c ) { 177 delete_transient( 'activecampaign_for_woocommerce_hs_contacts' ); 159 178 } 160 179 … … 166 185 'count' => $c, 167 186 ] 187 ); 188 } 189 190 private function schedule_next( $start ) { 191 wp_schedule_single_event( 192 time() + 50, 193 'activecampaign_for_woocommerce_run_historical_sync_contacts', 194 [ 'start' => $start ] 168 195 ); 169 196 } -
activecampaign-for-woocommerce/trunk/includes/orders/historical/class-activecampaign-for-woocommerce-historical-sync-handler.php
r2966088 r2977226 161 161 } 162 162 163 public function prep_historical_sync_contacts() { 164 set_transient( 'activecampaign_for_woocommerce_hs_contacts', 0, 3600 ); 165 } 166 163 167 /** 164 168 * Runs historical sync for contacts. … … 167 171 */ 168 172 public function run_historical_sync_contacts( ...$args ) { 169 $this->update_sync_running_status( 'contacts', 'syncing' ); 170 171 $historical_contacts = new Historical_Contacts( 172 $this->logger, 173 $this->contact_batch_repository 174 ); 175 176 $historical_contacts->execute( $args ); 177 178 $this->update_sync_running_status( 'contacts', 'finished' ); 173 if ( get_transient( 'activecampaign_for_woocommerce_hs_contacts' ) !== false ) { 174 $this->update_sync_running_status( 'contacts', 'syncing' ); 175 176 $historical_contacts = new Historical_Contacts( 177 $this->logger, 178 $this->contact_batch_repository 179 ); 180 181 $historical_contacts->execute( $args ); 182 } 183 184 // $this->update_sync_running_status( 'contacts', 'finished' ); 179 185 } 180 186
Note: See TracChangeset
for help on using the changeset viewer.