Use DI to create WooCommerce event emails
[MAILPOET-3924]
This commit is contained in:
@@ -28,13 +28,18 @@ class WooCommerce {
|
|||||||
/** @var WPFunctions */
|
/** @var WPFunctions */
|
||||||
private $wp;
|
private $wp;
|
||||||
|
|
||||||
|
/** @var WooCommerceEventFactory */
|
||||||
|
private $eventFactory;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
WPFunctions $wp,
|
WPFunctions $wp,
|
||||||
WooCommerceHelper $woocommerceHelper
|
WooCommerceHelper $woocommerceHelper,
|
||||||
|
WooCommerceEventFactory $eventFactory
|
||||||
) {
|
) {
|
||||||
$this->wp = $wp;
|
$this->wp = $wp;
|
||||||
$this->woocommerceHelper = $woocommerceHelper;
|
$this->woocommerceHelper = $woocommerceHelper;
|
||||||
$this->woocommerceEnabled = $this->isWoocommerceEnabled();
|
$this->woocommerceEnabled = $this->isWoocommerceEnabled();
|
||||||
|
$this->eventFactory = $eventFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function init() {
|
public function init() {
|
||||||
@@ -70,19 +75,15 @@ class WooCommerce {
|
|||||||
] : [];
|
] : [];
|
||||||
|
|
||||||
foreach ($this->availableEvents as $event) {
|
foreach ($this->availableEvents as $event) {
|
||||||
$eventClass = sprintf(
|
$eventInstance = in_array($event, $this->availableEvents, true)
|
||||||
'%s\Events\%s',
|
? $this->eventFactory->createEvent($event)
|
||||||
__NAMESPACE__,
|
: null;
|
||||||
$event
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!class_exists($eventClass)) {
|
if (!$eventInstance) {
|
||||||
$this->displayEventWarning($event);
|
$this->displayEventWarning($event);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$eventInstance = new $eventClass();
|
|
||||||
|
|
||||||
if (method_exists($eventInstance, 'init')) {
|
if (method_exists($eventInstance, 'init')) {
|
||||||
$eventInstance->init();
|
$eventInstance->init();
|
||||||
} else {
|
} else {
|
||||||
|
39
lib/AutomaticEmails/WooCommerce/WooCommerceEventFactory.php
Normal file
39
lib/AutomaticEmails/WooCommerce/WooCommerceEventFactory.php
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace MailPoet\AutomaticEmails\WooCommerce;
|
||||||
|
|
||||||
|
use MailPoet\AutomaticEmails\WooCommerce\Events\AbandonedCart;
|
||||||
|
use MailPoet\AutomaticEmails\WooCommerce\Events\FirstPurchase;
|
||||||
|
use MailPoet\AutomaticEmails\WooCommerce\Events\PurchasedInCategory;
|
||||||
|
use MailPoet\AutomaticEmails\WooCommerce\Events\PurchasedProduct;
|
||||||
|
use MailPoet\DI\ContainerWrapper;
|
||||||
|
use MailPoetVendor\Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException;
|
||||||
|
|
||||||
|
class WooCommerceEventFactory {
|
||||||
|
public const EVENTS_MAP = [
|
||||||
|
'AbandonedCart' => AbandonedCart::class,
|
||||||
|
'FirstPurchase' => FirstPurchase::class,
|
||||||
|
'PurchasedInCategory' => PurchasedInCategory::class,
|
||||||
|
'PurchasedProduct' => PurchasedProduct::class,
|
||||||
|
];
|
||||||
|
|
||||||
|
/** @var ContainerWrapper */
|
||||||
|
private $container;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
ContainerWrapper $container
|
||||||
|
) {
|
||||||
|
$this->container = $container;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return object|null */
|
||||||
|
public function createEvent(string $eventName) {
|
||||||
|
$eventClass = self::EVENTS_MAP[$eventName] ?? null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return $eventClass ? $this->container->get($eventClass) : null;
|
||||||
|
} catch (ServiceNotFoundException $e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -94,6 +94,11 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\AutomaticEmails\AutomaticEmails::class)->setPublic(true);
|
$container->autowire(\MailPoet\AutomaticEmails\AutomaticEmails::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\AutomaticEmails\AutomaticEmailFactory::class)->setPublic(true);
|
$container->autowire(\MailPoet\AutomaticEmails\AutomaticEmailFactory::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\AutomaticEmails\WooCommerce\WooCommerce::class)->setPublic(true);
|
$container->autowire(\MailPoet\AutomaticEmails\WooCommerce\WooCommerce::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\AutomaticEmails\WooCommerce\WooCommerceEventFactory::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\AutomaticEmails\WooCommerce\Events\AbandonedCart::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\AutomaticEmails\WooCommerce\Events\FirstPurchase::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\AutomaticEmails\WooCommerce\Events\PurchasedInCategory::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\AutomaticEmails\WooCommerce\Events\PurchasedProduct::class)->setPublic(true);
|
||||||
// Config
|
// Config
|
||||||
$container->autowire(\MailPoet\Config\AccessControl::class)->setPublic(true);
|
$container->autowire(\MailPoet\Config\AccessControl::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Config\Activator::class)->setPublic(true);
|
$container->autowire(\MailPoet\Config\Activator::class)->setPublic(true);
|
||||||
|
@@ -5,6 +5,7 @@ namespace MailPoet\API\JSON\v1;
|
|||||||
use MailPoet\AutomaticEmails\AutomaticEmailFactory;
|
use MailPoet\AutomaticEmails\AutomaticEmailFactory;
|
||||||
use MailPoet\AutomaticEmails\AutomaticEmails as AutomaticEmailsController;
|
use MailPoet\AutomaticEmails\AutomaticEmails as AutomaticEmailsController;
|
||||||
use MailPoet\AutomaticEmails\WooCommerce\WooCommerce;
|
use MailPoet\AutomaticEmails\WooCommerce\WooCommerce;
|
||||||
|
use MailPoet\AutomaticEmails\WooCommerce\WooCommerceEventFactory;
|
||||||
use MailPoet\WooCommerce\Helper;
|
use MailPoet\WooCommerce\Helper;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
@@ -17,8 +18,9 @@ class AutomaticEmailsTest extends \MailPoetTest {
|
|||||||
public function _before() {
|
public function _before() {
|
||||||
$this->wp = new WPFunctions;
|
$this->wp = new WPFunctions;
|
||||||
|
|
||||||
|
$wooCommerceEventFactory = $this->diContainer->get(WooCommerceEventFactory::class);
|
||||||
$automaticEmailFactory = $this->makeEmpty(AutomaticEmailFactory::class, [
|
$automaticEmailFactory = $this->makeEmpty(AutomaticEmailFactory::class, [
|
||||||
'createWooCommerceEmail' => new WooCommerce($this->wp, new Helper()),
|
'createWooCommerceEmail' => new WooCommerce($this->wp, new Helper(), $wooCommerceEventFactory),
|
||||||
]);
|
]);
|
||||||
$this->api = new AutomaticEmails(new AutomaticEmailsController($this->wp, $automaticEmailFactory), $this->wp);
|
$this->api = new AutomaticEmails(new AutomaticEmailsController($this->wp, $automaticEmailFactory), $this->wp);
|
||||||
}
|
}
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
namespace MailPoet\AutomaticEmails;
|
namespace MailPoet\AutomaticEmails;
|
||||||
|
|
||||||
use MailPoet\AutomaticEmails\WooCommerce\WooCommerce;
|
use MailPoet\AutomaticEmails\WooCommerce\WooCommerce;
|
||||||
|
use MailPoet\AutomaticEmails\WooCommerce\WooCommerceEventFactory;
|
||||||
use MailPoet\WooCommerce\Helper;
|
use MailPoet\WooCommerce\Helper;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
@@ -10,13 +11,17 @@ class AutomaticEmailsTest extends \MailPoetTest {
|
|||||||
public $wp;
|
public $wp;
|
||||||
public $AM;
|
public $AM;
|
||||||
|
|
||||||
|
/** @var WooCommerceEventFactory */
|
||||||
|
private $wooCommerceEventFactory;
|
||||||
|
|
||||||
/** @var AutomaticEmailFactory */
|
/** @var AutomaticEmailFactory */
|
||||||
private $automaticEmailFactory;
|
private $automaticEmailFactory;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
$this->wp = new WPFunctions();
|
$this->wp = new WPFunctions();
|
||||||
|
$this->wooCommerceEventFactory = $this->diContainer->get(WooCommerceEventFactory::class);
|
||||||
$this->automaticEmailFactory = $this->makeEmpty(AutomaticEmailFactory::class, [
|
$this->automaticEmailFactory = $this->makeEmpty(AutomaticEmailFactory::class, [
|
||||||
'createWooCommerceEmail' => new WooCommerce($this->wp, new Helper()),
|
'createWooCommerceEmail' => new WooCommerce($this->wp, new Helper(), $this->wooCommerceEventFactory),
|
||||||
]);
|
]);
|
||||||
$this->AM = new AutomaticEmails($this->wp, $this->automaticEmailFactory);
|
$this->AM = new AutomaticEmails($this->wp, $this->automaticEmailFactory);
|
||||||
}
|
}
|
||||||
|
@@ -12,12 +12,16 @@ use MailPoet\WooCommerce\Helper;
|
|||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
class WooCommerceTest extends \MailPoetTest {
|
class WooCommerceTest extends \MailPoetTest {
|
||||||
|
/** @var WooCommerceEventFactory */
|
||||||
|
private $wooCommerceEventFactory;
|
||||||
|
|
||||||
/** @var AutomaticEmailFactory */
|
/** @var AutomaticEmailFactory */
|
||||||
private $automaticEmailFactory;
|
private $automaticEmailFactory;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
|
$this->wooCommerceEventFactory = $this->diContainer->get(WooCommerceEventFactory::class);
|
||||||
$this->automaticEmailFactory = $this->makeEmpty(AutomaticEmailFactory::class, [
|
$this->automaticEmailFactory = $this->makeEmpty(AutomaticEmailFactory::class, [
|
||||||
'createWooCommerceEmail' => new WooCommerce(new WPFunctions(), new Helper()),
|
'createWooCommerceEmail' => new WooCommerce(new WPFunctions(), new Helper(), $this->wooCommerceEventFactory),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +107,7 @@ class WooCommerceTest extends \MailPoetTest {
|
|||||||
|
|
||||||
private function createWooCommerceEmailMock(bool $isWoocommerceEnabled = true): WooCommerce {
|
private function createWooCommerceEmailMock(bool $isWoocommerceEnabled = true): WooCommerce {
|
||||||
$mock = $this->make(WooCommerce::class, ['isWoocommerceEnabled' => $isWoocommerceEnabled]);
|
$mock = $this->make(WooCommerce::class, ['isWoocommerceEnabled' => $isWoocommerceEnabled]);
|
||||||
$mock->__construct(new WPFunctions(), new Helper());
|
$mock->__construct(new WPFunctions(), new Helper(), $this->wooCommerceEventFactory);
|
||||||
return $mock;
|
return $mock;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user