Simplify WorkersFactory using DI and making it container-aware
[MAILPOET-2538]
This commit is contained in:
committed by
Jack Kitterhing
parent
382df5e034
commit
dc5e2ae386
@ -8,7 +8,7 @@ use MailPoet\Cron\Workers\SimpleWorker;
|
|||||||
use MailPoet\Mailer\MailerLog;
|
use MailPoet\Mailer\MailerLog;
|
||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
use MailPoet\Models\ScheduledTaskSubscriber;
|
use MailPoet\Models\ScheduledTaskSubscriber;
|
||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue as SendingQueueModel;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
class Migration extends SimpleWorker {
|
class Migration extends SimpleWorker {
|
||||||
@ -82,12 +82,12 @@ class Migration extends SimpleWorker {
|
|||||||
|
|
||||||
private function checkUnmigratedColumnsExist() {
|
private function checkUnmigratedColumnsExist() {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
$existing_columns = $wpdb->get_col('DESC ' . SendingQueue::$_table);
|
$existing_columns = $wpdb->get_col('DESC ' . SendingQueueModel::$_table);
|
||||||
return in_array('type', $existing_columns);
|
return in_array('type', $existing_columns);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getUnmigratedQueues() {
|
function getUnmigratedQueues() {
|
||||||
return SendingQueue::where('task_id', 0)
|
return SendingQueueModel::where('task_id', 0)
|
||||||
->whereNull('type');
|
->whereNull('type');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,239 +2,102 @@
|
|||||||
|
|
||||||
namespace MailPoet\Cron\Workers;
|
namespace MailPoet\Cron\Workers;
|
||||||
|
|
||||||
use MailPoet\Config\Renderer;
|
|
||||||
use MailPoet\Cron\CronHelper;
|
|
||||||
use MailPoet\Cron\Workers\Bounce as BounceWorker;
|
use MailPoet\Cron\Workers\Bounce as BounceWorker;
|
||||||
use MailPoet\Cron\Workers\KeyCheck\PremiumKeyCheck as PremiumKeyCheckWorker;
|
use MailPoet\Cron\Workers\KeyCheck\PremiumKeyCheck as PremiumKeyCheckWorker;
|
||||||
use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck as SendingServiceKeyCheckWorker;
|
use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck as SendingServiceKeyCheckWorker;
|
||||||
use MailPoet\Cron\Workers\Scheduler as SchedulerWorker;
|
use MailPoet\Cron\Workers\Scheduler as SchedulerWorker;
|
||||||
use MailPoet\Cron\Workers\SendingQueue\Migration as MigrationWorker;
|
use MailPoet\Cron\Workers\SendingQueue\Migration as MigrationWorker;
|
||||||
use MailPoet\Cron\Workers\SendingQueue\SendingErrorHandler;
|
|
||||||
use MailPoet\Cron\Workers\SendingQueue\SendingQueue as SendingQueueWorker;
|
use MailPoet\Cron\Workers\SendingQueue\SendingQueue as SendingQueueWorker;
|
||||||
use MailPoet\Cron\Workers\StatsNotifications\AutomatedEmails as StatsNotificationsWorkerForAutomatedEmails;
|
use MailPoet\Cron\Workers\StatsNotifications\AutomatedEmails as StatsNotificationsWorkerForAutomatedEmails;
|
||||||
use MailPoet\Cron\Workers\StatsNotifications\NewsletterLinkRepository;
|
|
||||||
use MailPoet\Cron\Workers\StatsNotifications\Scheduler as StatsNotificationScheduler;
|
|
||||||
use MailPoet\Cron\Workers\StatsNotifications\StatsNotificationsRepository;
|
|
||||||
use MailPoet\Cron\Workers\StatsNotifications\Worker as StatsNotificationsWorker;
|
use MailPoet\Cron\Workers\StatsNotifications\Worker as StatsNotificationsWorker;
|
||||||
use MailPoet\Cron\Workers\WooCommerceSync as WooCommerceSyncWorker;
|
use MailPoet\Cron\Workers\WooCommerceSync as WooCommerceSyncWorker;
|
||||||
use MailPoet\Logging\LoggerFactory;
|
use MailPoet\DI\ContainerWrapper;
|
||||||
use MailPoet\Mailer\Mailer;
|
|
||||||
use MailPoet\Mailer\MetaInfo;
|
|
||||||
use MailPoet\Newsletter\NewslettersRepository;
|
|
||||||
use MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository;
|
|
||||||
use MailPoet\Segments\SubscribersFinder;
|
|
||||||
use MailPoet\Segments\WooCommerce as WooCommerceSegment;
|
|
||||||
use MailPoet\Services\AuthorizedEmailsController;
|
|
||||||
use MailPoet\Settings\SettingsController;
|
|
||||||
use MailPoet\Statistics\Track\WooCommercePurchases;
|
|
||||||
use MailPoet\Subscribers\InactiveSubscribersController;
|
|
||||||
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
|
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
|
||||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
|
||||||
|
|
||||||
class WorkersFactory {
|
class WorkersFactory {
|
||||||
|
/** @var ContainerWrapper */
|
||||||
|
private $container;
|
||||||
|
|
||||||
/** @var SendingErrorHandler */
|
public function __construct(ContainerWrapper $container) {
|
||||||
private $sending_error_handler;
|
$this->container = $container;
|
||||||
|
|
||||||
/** @var StatsNotificationScheduler */
|
|
||||||
private $statsNotificationsScheduler;
|
|
||||||
|
|
||||||
/** @var Mailer */
|
|
||||||
private $mailer;
|
|
||||||
|
|
||||||
/** @var SettingsController */
|
|
||||||
private $settings;
|
|
||||||
|
|
||||||
/** @var CronHelper */
|
|
||||||
private $cron_helper;
|
|
||||||
|
|
||||||
/** @var WooCommerceSegment */
|
|
||||||
private $woocommerce_segment;
|
|
||||||
|
|
||||||
/** @var InactiveSubscribersController */
|
|
||||||
private $inactive_subscribers_controller;
|
|
||||||
|
|
||||||
/** @var WooCommerceHelper */
|
|
||||||
private $woocommerce_helper;
|
|
||||||
|
|
||||||
/** @var WooCommercePurchases */
|
|
||||||
private $woocommerce_purchases;
|
|
||||||
|
|
||||||
/** @var AuthorizedEmailsController */
|
|
||||||
private $authorized_emails_controller;
|
|
||||||
|
|
||||||
/** @var Renderer */
|
|
||||||
private $renderer;
|
|
||||||
|
|
||||||
/** @var SubscribersFinder */
|
|
||||||
private $subscribers_finder;
|
|
||||||
|
|
||||||
/** @var MetaInfo */
|
|
||||||
private $mailerMetaInfo;
|
|
||||||
|
|
||||||
/** @var LoggerFactory */
|
|
||||||
private $logger_factory;
|
|
||||||
|
|
||||||
/** @var StatsNotificationsRepository */
|
|
||||||
private $stats_notifications_repository;
|
|
||||||
|
|
||||||
/** @var EntityManager */
|
|
||||||
private $entity_manager;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var NewslettersRepository
|
|
||||||
*/
|
|
||||||
private $newsletters_repository;
|
|
||||||
|
|
||||||
/** @var NewsletterLinkRepository */
|
|
||||||
private $newsletter_link_repository;
|
|
||||||
|
|
||||||
/** @var NewsletterStatisticsRepository */
|
|
||||||
private $newsletter_statistics_repository;
|
|
||||||
|
|
||||||
public function __construct(
|
|
||||||
SendingErrorHandler $sending_error_handler,
|
|
||||||
StatsNotificationScheduler $statsNotificationsScheduler,
|
|
||||||
Mailer $mailer,
|
|
||||||
Renderer $renderer,
|
|
||||||
SettingsController $settings,
|
|
||||||
CronHelper $cron_helper,
|
|
||||||
WooCommerceSegment $woocommerce_segment,
|
|
||||||
InactiveSubscribersController $inactive_subscribers_controller,
|
|
||||||
WooCommerceHelper $woocommerce_helper,
|
|
||||||
WooCommercePurchases $woocommerce_purchases,
|
|
||||||
AuthorizedEmailsController $authorized_emails_controller,
|
|
||||||
SubscribersFinder $subscribers_finder,
|
|
||||||
MetaInfo $mailerMetaInfo,
|
|
||||||
LoggerFactory $logger_factory,
|
|
||||||
StatsNotificationsRepository $stats_notifications_repository,
|
|
||||||
NewslettersRepository $newsletters_repository,
|
|
||||||
NewsletterLinkRepository $newsletter_link_repository,
|
|
||||||
NewsletterStatisticsRepository $newsletter_statistics_repository,
|
|
||||||
EntityManager $entity_manager
|
|
||||||
) {
|
|
||||||
$this->sending_error_handler = $sending_error_handler;
|
|
||||||
$this->statsNotificationsScheduler = $statsNotificationsScheduler;
|
|
||||||
$this->mailer = $mailer;
|
|
||||||
$this->renderer = $renderer;
|
|
||||||
$this->settings = $settings;
|
|
||||||
$this->cron_helper = $cron_helper;
|
|
||||||
$this->woocommerce_segment = $woocommerce_segment;
|
|
||||||
$this->inactive_subscribers_controller = $inactive_subscribers_controller;
|
|
||||||
$this->woocommerce_helper = $woocommerce_helper;
|
|
||||||
$this->woocommerce_purchases = $woocommerce_purchases;
|
|
||||||
$this->authorized_emails_controller = $authorized_emails_controller;
|
|
||||||
$this->subscribers_finder = $subscribers_finder;
|
|
||||||
$this->mailerMetaInfo = $mailerMetaInfo;
|
|
||||||
$this->logger_factory = $logger_factory;
|
|
||||||
$this->stats_notifications_repository = $stats_notifications_repository;
|
|
||||||
$this->entity_manager = $entity_manager;
|
|
||||||
$this->newsletters_repository = $newsletters_repository;
|
|
||||||
$this->newsletter_link_repository = $newsletter_link_repository;
|
|
||||||
$this->newsletter_statistics_repository = $newsletter_statistics_repository;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return SchedulerWorker */
|
/** @return SchedulerWorker */
|
||||||
function createScheduleWorker() {
|
function createScheduleWorker() {
|
||||||
return new SchedulerWorker($this->subscribers_finder, $this->logger_factory, $this->cron_helper);
|
return $this->container->get(SchedulerWorker::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return SendingQueueWorker */
|
/** @return SendingQueueWorker */
|
||||||
function createQueueWorker() {
|
function createQueueWorker() {
|
||||||
return new SendingQueueWorker(
|
return $this->container->get(SendingQueueWorker::class);
|
||||||
$this->sending_error_handler,
|
|
||||||
$this->statsNotificationsScheduler,
|
|
||||||
$this->logger_factory,
|
|
||||||
$this->newsletters_repository,
|
|
||||||
$this->cron_helper
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return StatsNotificationsWorker */
|
/** @return StatsNotificationsWorker */
|
||||||
function createStatsNotificationsWorker() {
|
function createStatsNotificationsWorker() {
|
||||||
return new StatsNotificationsWorker(
|
return $this->container->get(StatsNotificationsWorker::class);
|
||||||
$this->mailer,
|
|
||||||
$this->renderer,
|
|
||||||
$this->settings,
|
|
||||||
$this->cron_helper,
|
|
||||||
$this->mailerMetaInfo,
|
|
||||||
$this->stats_notifications_repository,
|
|
||||||
$this->newsletter_link_repository,
|
|
||||||
$this->newsletter_statistics_repository,
|
|
||||||
$this->entity_manager
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return StatsNotificationsWorkerForAutomatedEmails */
|
/** @return StatsNotificationsWorkerForAutomatedEmails */
|
||||||
function createStatsNotificationsWorkerForAutomatedEmails() {
|
function createStatsNotificationsWorkerForAutomatedEmails() {
|
||||||
return new StatsNotificationsWorkerForAutomatedEmails(
|
return $this->container->get(StatsNotificationsWorkerForAutomatedEmails::class);
|
||||||
$this->mailer,
|
|
||||||
$this->renderer,
|
|
||||||
$this->settings,
|
|
||||||
$this->newsletters_repository,
|
|
||||||
$this->newsletter_statistics_repository,
|
|
||||||
$this->mailerMetaInfo
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return SendingServiceKeyCheckWorker */
|
/** @return SendingServiceKeyCheckWorker */
|
||||||
function createSendingServiceKeyCheckWorker() {
|
function createSendingServiceKeyCheckWorker() {
|
||||||
return new SendingServiceKeyCheckWorker($this->settings);
|
return $this->container->get(SendingServiceKeyCheckWorker::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return PremiumKeyCheckWorker */
|
/** @return PremiumKeyCheckWorker */
|
||||||
function createPremiumKeyCheckWorker() {
|
function createPremiumKeyCheckWorker() {
|
||||||
return new PremiumKeyCheckWorker($this->settings);
|
return $this->container->get(PremiumKeyCheckWorker::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return BounceWorker */
|
/** @return BounceWorker */
|
||||||
function createBounceWorker() {
|
function createBounceWorker() {
|
||||||
return new BounceWorker($this->settings);
|
return $this->container->get(BounceWorker::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return MigrationWorker */
|
/** @return MigrationWorker */
|
||||||
function createMigrationWorker() {
|
function createMigrationWorker() {
|
||||||
return new MigrationWorker();
|
return $this->container->get(MigrationWorker::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return WooCommerceSyncWorker */
|
/** @return WooCommerceSyncWorker */
|
||||||
function createWooCommerceSyncWorker() {
|
function createWooCommerceSyncWorker() {
|
||||||
return new WooCommerceSyncWorker($this->woocommerce_segment, $this->woocommerce_helper);
|
return $this->container->get(WooCommerceSyncWorker::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return ExportFilesCleanup */
|
/** @return ExportFilesCleanup */
|
||||||
function createExportFilesCleanupWorker() {
|
function createExportFilesCleanupWorker() {
|
||||||
return new ExportFilesCleanup();
|
return $this->container->get(ExportFilesCleanup::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return Beamer */
|
/** @return Beamer */
|
||||||
function createBeamerkWorker() {
|
function createBeamerkWorker() {
|
||||||
return new Beamer($this->settings, WPFunctions::get());
|
return $this->container->get(Beamer::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return InactiveSubscribers */
|
/** @return InactiveSubscribers */
|
||||||
function createInactiveSubscribersWorker() {
|
function createInactiveSubscribersWorker() {
|
||||||
return new InactiveSubscribers($this->inactive_subscribers_controller, $this->settings);
|
return $this->container->get(InactiveSubscribers::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return UnsubscribeTokens */
|
/** @return UnsubscribeTokens */
|
||||||
function createUnsubscribeTokensWorker() {
|
function createUnsubscribeTokensWorker() {
|
||||||
return new UnsubscribeTokens();
|
return $this->container->get(UnsubscribeTokens::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return SubscriberLinkTokens */
|
/** @return SubscriberLinkTokens */
|
||||||
function createSubscriberLinkTokensWorker() {
|
function createSubscriberLinkTokensWorker() {
|
||||||
return new SubscriberLinkTokens();
|
return $this->container->get(SubscriberLinkTokens::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return AuthorizedSendingEmailsCheck */
|
/** @return AuthorizedSendingEmailsCheck */
|
||||||
function createAuthorizedSendingEmailsCheckWorker() {
|
function createAuthorizedSendingEmailsCheckWorker() {
|
||||||
return new AuthorizedSendingEmailsCheck($this->authorized_emails_controller);
|
return $this->container->get(AuthorizedSendingEmailsCheck::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return WooCommercePastOrders */
|
/** @return WooCommercePastOrders */
|
||||||
function createWooCommercePastOrdersWorker() {
|
function createWooCommercePastOrdersWorker() {
|
||||||
return new WooCommercePastOrders($this->woocommerce_helper, $this->woocommerce_purchases);
|
return $this->container->get(WooCommercePastOrders::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -139,6 +139,23 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\Cron\Workers\StatsNotifications\Scheduler::class);
|
$container->autowire(\MailPoet\Cron\Workers\StatsNotifications\Scheduler::class);
|
||||||
$container->autowire(\MailPoet\Cron\Workers\StatsNotifications\StatsNotificationsRepository::class);
|
$container->autowire(\MailPoet\Cron\Workers\StatsNotifications\StatsNotificationsRepository::class);
|
||||||
$container->autowire(\MailPoet\Cron\Workers\StatsNotifications\NewsletterLinkRepository::class);
|
$container->autowire(\MailPoet\Cron\Workers\StatsNotifications\NewsletterLinkRepository::class);
|
||||||
|
// Cron workers
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\Scheduler::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\SendingQueue\SendingQueue::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\StatsNotifications\Worker::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\StatsNotifications\AutomatedEmails::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\KeyCheck\PremiumKeyCheck::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\Bounce::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\SendingQueue\Migration::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\WooCommerceSync::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\ExportFilesCleanup::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\Beamer::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\InactiveSubscribers::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\UnsubscribeTokens::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\SubscriberLinkTokens::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\AuthorizedSendingEmailsCheck::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Cron\Workers\WooCommercePastOrders::class)->setPublic(true);
|
||||||
// Custom field
|
// Custom field
|
||||||
$container->autowire(\MailPoet\CustomFields\ApiDataSanitizer::class);
|
$container->autowire(\MailPoet\CustomFields\ApiDataSanitizer::class);
|
||||||
// Features
|
// Features
|
||||||
|
@ -294,6 +294,8 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
|
|||||||
'createAuthorizedSendingEmailsCheckWorker' => $worker,
|
'createAuthorizedSendingEmailsCheckWorker' => $worker,
|
||||||
'createWooCommercePastOrdersWorker' => $worker,
|
'createWooCommercePastOrdersWorker' => $worker,
|
||||||
'createBeamerkWorker' => $worker,
|
'createBeamerkWorker' => $worker,
|
||||||
|
'createUnsubscribeTokensWorker' => $worker,
|
||||||
|
'createSubscriberLinkTokensWorker' => $worker,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,8 @@ class DaemonTest extends \MailPoetTest {
|
|||||||
'createAuthorizedSendingEmailsCheckWorker' => $this->createSimpleWorkerMock(),
|
'createAuthorizedSendingEmailsCheckWorker' => $this->createSimpleWorkerMock(),
|
||||||
'createWooCommercePastOrdersWorker' => $this->createSimpleWorkerMock(),
|
'createWooCommercePastOrdersWorker' => $this->createSimpleWorkerMock(),
|
||||||
'createBeamerkWorker' => $this->createSimpleWorkerMock(),
|
'createBeamerkWorker' => $this->createSimpleWorkerMock(),
|
||||||
|
'createUnsubscribeTokensWorker' => $this->createSimpleWorkerMock(),
|
||||||
|
'createSubscriberLinkTokensWorker' => $this->createSimpleWorkerMock(),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user