Use WooCommerce abstraction from automations instead of MP

This commit is contained in:
David Remer
2023-06-19 08:04:52 +03:00
committed by Aschepikov
parent 2203629991
commit c03a3becc4
6 changed files with 38 additions and 25 deletions

View File

@@ -6,10 +6,10 @@ use MailPoet\Automation\Engine\Data\Subject;
use MailPoet\Automation\Engine\Integration\SubjectTransformer;
use MailPoet\Automation\Integrations\MailPoet\Subjects\SubscriberSubject;
use MailPoet\Automation\Integrations\WooCommerce\Subjects\OrderSubject;
use MailPoet\Automation\Integrations\WooCommerce\WooCommerce;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Segments;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
class OrderSubjectToSubscriberSubjectTransformer implements SubjectTransformer {
@@ -19,13 +19,13 @@ class OrderSubjectToSubscriberSubjectTransformer implements SubjectTransformer {
/** @var Segments\WooCommerce */
private $woocommerce;
/** @var WooCommerceHelper */
/** @var WooCommerce */
private $woocommerceHelper;
public function __construct(
SubscribersRepository $subscribersRepository,
Segments\WooCommerce $woocommerce,
WooCommerceHelper $woocommerceHelper
WooCommerce $woocommerceHelper
) {
$this->subscribersRepository = $subscribersRepository;
$this->woocommerce = $woocommerce;
@@ -74,6 +74,9 @@ class OrderSubjectToSubscriberSubjectTransformer implements SubjectTransformer {
return null;
}
$wcOrder = $this->woocommerceHelper->wcGetOrder($orderId);
if (!$wcOrder instanceof \WC_Order) {
return null;
}
$billingEmail = $wcOrder->get_billing_email();
return $billingEmail ?
$this->subscribersRepository->findOneBy(['email' => $billingEmail]) :

View File

@@ -2,28 +2,26 @@
namespace MailPoet\Automation\Integrations\WooCommerce;
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
class ContextFactory {
/** @var WooCommerceHelper */
private $woocommerceHelper;
/** @var WooCommerce */
private $woocommerce;
public function __construct(
WooCommerceHelper $woocommerceHelper
WooCommerce $woocommerce
) {
$this->woocommerceHelper = $woocommerceHelper;
$this->woocommerce = $woocommerce;
}
/** @return mixed[] */
public function getContextData(): array {
if (!$this->woocommerceHelper->isWooCommerceActive()) {
if (!$this->woocommerce->isWooCommerceActive()) {
return [];
}
$context = [
'order_statuses' => $this->woocommerceHelper->getOrderStatuses(),
'order_statuses' => $this->woocommerce->wcGetOrderStatuses(),
];
return $context;
}

View File

@@ -7,9 +7,9 @@ use MailPoet\Automation\Engine\Exceptions\InvalidStateException;
use MailPoet\Automation\Engine\Integration\Payload;
use MailPoet\Automation\Engine\Integration\Subject;
use MailPoet\Automation\Integrations\WooCommerce\Payloads\AbandonedCartPayload;
use MailPoet\Automation\Integrations\WooCommerce\WooCommerce;
use MailPoet\Validator\Builder;
use MailPoet\Validator\Schema\ObjectSchema;
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
/**
* @implements Subject<AbandonedCartPayload>
@@ -17,11 +17,11 @@ use MailPoet\WooCommerce\Helper as WooCommerceHelper;
class AbandonedCartSubject implements Subject {
const KEY = 'woocommerce:abandoned_cart';
/** @var WooCommerceHelper */
/** @var WooCommerce */
private $woocommerceHelper;
public function __construct(
WooCommerceHelper $woocommerceHelper
WooCommerce $woocommerceHelper
) {
$this->woocommerceHelper = $woocommerceHelper;
}

View File

@@ -7,10 +7,10 @@ use MailPoet\Automation\Engine\Integration\Payload;
use MailPoet\Automation\Engine\Integration\Subject;
use MailPoet\Automation\Integrations\WooCommerce\Fields\OrderFieldsFactory;
use MailPoet\Automation\Integrations\WooCommerce\Payloads\OrderPayload;
use MailPoet\Automation\Integrations\WooCommerce\WooCommerce;
use MailPoet\NotFoundException;
use MailPoet\Validator\Builder;
use MailPoet\Validator\Schema\ObjectSchema;
use MailPoet\WooCommerce\Helper;
/**
* @implements Subject<OrderPayload>
@@ -19,14 +19,15 @@ class OrderSubject implements Subject {
const KEY = 'woocommerce:order';
/** @var WooCommerce */
private $woocommerce;
/** @var OrderFieldsFactory */
private $orderFieldsFactory;
public function __construct(
Helper $woocommerce,
OrderFieldsFactory $orderFieldsFactory
OrderFieldsFactory $orderFieldsFactory,
WooCommerce $woocommerce
) {
$this->woocommerce = $woocommerce;
$this->orderFieldsFactory = $orderFieldsFactory;

View File

@@ -11,9 +11,9 @@ use MailPoet\Automation\Integrations\WooCommerce\Payloads\OrderStatusChangePaylo
use MailPoet\Automation\Integrations\WooCommerce\Subjects\CustomerSubject;
use MailPoet\Automation\Integrations\WooCommerce\Subjects\OrderStatusChangeSubject;
use MailPoet\Automation\Integrations\WooCommerce\Subjects\OrderSubject;
use MailPoet\Automation\Integrations\WooCommerce\WooCommerce;
use MailPoet\Validator\Builder;
use MailPoet\Validator\Schema\ObjectSchema;
use MailPoet\WooCommerce;
use MailPoet\WP\Functions;
class OrderStatusChangedTrigger implements Trigger {
@@ -21,15 +21,15 @@ class OrderStatusChangedTrigger implements Trigger {
/** @var Functions */
private $wp;
/** @var WooCommerce\Helper */
private $woocommerceHelper;
/** @var WooCommerce */
private $woocommerce;
public function __construct(
Functions $wp,
WooCommerce\Helper $woocommerceHelper
WooCommerce $woocommerceHelper
) {
$this->wp = $wp;
$this->woocommerceHelper = $woocommerceHelper;
$this->woocommerce = $woocommerceHelper;
}
public function getKey(): string {
@@ -71,7 +71,7 @@ class OrderStatusChangedTrigger implements Trigger {
}
public function handle(int $orderId, string $oldStatus, string $newStatus): void {
$order = $this->woocommerceHelper->wcGetOrder($orderId);
$order = $this->woocommerce->wcGetOrder($orderId);
if (!$order instanceof \WC_Order) {
return;
}

View File

@@ -15,6 +15,13 @@ class WooCommerce {
return wc_get_is_paid_statuses();
}
/**
* @return array<string, string>
*/
public function wcGetOrderStatuses(): array {
return wc_get_order_statuses();
}
public function isWooCommerceCustomOrdersTableEnabled(): bool {
return $this->isWooCommerceActive()
&& method_exists(OrderUtil::class, 'custom_orders_table_usage_is_enabled')
@@ -26,7 +33,11 @@ class WooCommerce {
return wc_get_orders($args);
}
public function wcGetOrderStatuses(): array {
return wc_get_order_statuses();
/**
* @param int|bool $order
* @return bool|\WC_Order|\WC_Order_Refund
*/
public function wcGetOrder($order = false) {
return wc_get_order($order);
}
}