diff --git a/lib/Cron/Workers/SendingQueue/Migration.php b/lib/Cron/Workers/SendingQueue/Migration.php index 1cc4113935..d4d7a29169 100644 --- a/lib/Cron/Workers/SendingQueue/Migration.php +++ b/lib/Cron/Workers/SendingQueue/Migration.php @@ -8,7 +8,7 @@ use MailPoet\Cron\Workers\SimpleWorker; use MailPoet\Mailer\MailerLog; use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTaskSubscriber; -use MailPoet\Models\SendingQueue; +use MailPoet\Models\SendingQueue as SendingQueueModel; use MailPoet\WP\Functions as WPFunctions; class Migration extends SimpleWorker { @@ -82,12 +82,12 @@ class Migration extends SimpleWorker { private function checkUnmigratedColumnsExist() { global $wpdb; - $existing_columns = $wpdb->get_col('DESC ' . SendingQueue::$_table); + $existing_columns = $wpdb->get_col('DESC ' . SendingQueueModel::$_table); return in_array('type', $existing_columns); } function getUnmigratedQueues() { - return SendingQueue::where('task_id', 0) + return SendingQueueModel::where('task_id', 0) ->whereNull('type'); } diff --git a/lib/Cron/Workers/WorkersFactory.php b/lib/Cron/Workers/WorkersFactory.php index 7f12e64b5d..33cbc12db3 100644 --- a/lib/Cron/Workers/WorkersFactory.php +++ b/lib/Cron/Workers/WorkersFactory.php @@ -2,239 +2,102 @@ namespace MailPoet\Cron\Workers; -use MailPoet\Config\Renderer; -use MailPoet\Cron\CronHelper; use MailPoet\Cron\Workers\Bounce as BounceWorker; use MailPoet\Cron\Workers\KeyCheck\PremiumKeyCheck as PremiumKeyCheckWorker; use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck as SendingServiceKeyCheckWorker; use MailPoet\Cron\Workers\Scheduler as SchedulerWorker; 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\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\WooCommerceSync as WooCommerceSyncWorker; -use MailPoet\Logging\LoggerFactory; -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; +use MailPoet\DI\ContainerWrapper; class WorkersFactory { + /** @var ContainerWrapper */ + private $container; - /** @var SendingErrorHandler */ - private $sending_error_handler; - - /** @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; + public function __construct(ContainerWrapper $container) { + $this->container = $container; } /** @return SchedulerWorker */ function createScheduleWorker() { - return new SchedulerWorker($this->subscribers_finder, $this->logger_factory, $this->cron_helper); + return $this->container->get(SchedulerWorker::class); } /** @return SendingQueueWorker */ function createQueueWorker() { - return new SendingQueueWorker( - $this->sending_error_handler, - $this->statsNotificationsScheduler, - $this->logger_factory, - $this->newsletters_repository, - $this->cron_helper - ); + return $this->container->get(SendingQueueWorker::class); } /** @return StatsNotificationsWorker */ function createStatsNotificationsWorker() { - return new StatsNotificationsWorker( - $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 $this->container->get(StatsNotificationsWorker::class); } /** @return StatsNotificationsWorkerForAutomatedEmails */ function createStatsNotificationsWorkerForAutomatedEmails() { - return new StatsNotificationsWorkerForAutomatedEmails( - $this->mailer, - $this->renderer, - $this->settings, - $this->newsletters_repository, - $this->newsletter_statistics_repository, - $this->mailerMetaInfo - ); + return $this->container->get(StatsNotificationsWorkerForAutomatedEmails::class); } /** @return SendingServiceKeyCheckWorker */ function createSendingServiceKeyCheckWorker() { - return new SendingServiceKeyCheckWorker($this->settings); + return $this->container->get(SendingServiceKeyCheckWorker::class); } /** @return PremiumKeyCheckWorker */ function createPremiumKeyCheckWorker() { - return new PremiumKeyCheckWorker($this->settings); + return $this->container->get(PremiumKeyCheckWorker::class); } /** @return BounceWorker */ function createBounceWorker() { - return new BounceWorker($this->settings); + return $this->container->get(BounceWorker::class); } /** @return MigrationWorker */ function createMigrationWorker() { - return new MigrationWorker(); + return $this->container->get(MigrationWorker::class); } /** @return WooCommerceSyncWorker */ function createWooCommerceSyncWorker() { - return new WooCommerceSyncWorker($this->woocommerce_segment, $this->woocommerce_helper); + return $this->container->get(WooCommerceSyncWorker::class); } /** @return ExportFilesCleanup */ function createExportFilesCleanupWorker() { - return new ExportFilesCleanup(); + return $this->container->get(ExportFilesCleanup::class); } /** @return Beamer */ function createBeamerkWorker() { - return new Beamer($this->settings, WPFunctions::get()); + return $this->container->get(Beamer::class); } /** @return InactiveSubscribers */ function createInactiveSubscribersWorker() { - return new InactiveSubscribers($this->inactive_subscribers_controller, $this->settings); + return $this->container->get(InactiveSubscribers::class); } - /** @return UnsubscribeTokens */ + /** @return UnsubscribeTokens */ function createUnsubscribeTokensWorker() { - return new UnsubscribeTokens(); + return $this->container->get(UnsubscribeTokens::class); } - /** @return SubscriberLinkTokens */ + /** @return SubscriberLinkTokens */ function createSubscriberLinkTokensWorker() { - return new SubscriberLinkTokens(); + return $this->container->get(SubscriberLinkTokens::class); } /** @return AuthorizedSendingEmailsCheck */ function createAuthorizedSendingEmailsCheckWorker() { - return new AuthorizedSendingEmailsCheck($this->authorized_emails_controller); + return $this->container->get(AuthorizedSendingEmailsCheck::class); } /** @return WooCommercePastOrders */ function createWooCommercePastOrdersWorker() { - return new WooCommercePastOrders($this->woocommerce_helper, $this->woocommerce_purchases); + return $this->container->get(WooCommercePastOrders::class); } } diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index 58831840a4..b4438b93f6 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -139,6 +139,23 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\Cron\Workers\StatsNotifications\Scheduler::class); $container->autowire(\MailPoet\Cron\Workers\StatsNotifications\StatsNotificationsRepository::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 $container->autowire(\MailPoet\CustomFields\ApiDataSanitizer::class); // Features diff --git a/tests/integration/Cron/DaemonHttpRunnerTest.php b/tests/integration/Cron/DaemonHttpRunnerTest.php index 1d7e428e9f..c6155c524b 100644 --- a/tests/integration/Cron/DaemonHttpRunnerTest.php +++ b/tests/integration/Cron/DaemonHttpRunnerTest.php @@ -294,6 +294,8 @@ class DaemonHttpRunnerTest extends \MailPoetTest { 'createAuthorizedSendingEmailsCheckWorker' => $worker, 'createWooCommercePastOrdersWorker' => $worker, 'createBeamerkWorker' => $worker, + 'createUnsubscribeTokensWorker' => $worker, + 'createSubscriberLinkTokensWorker' => $worker, ]); } } diff --git a/tests/integration/Cron/DaemonTest.php b/tests/integration/Cron/DaemonTest.php index 311c92e1b8..bc7cebda93 100644 --- a/tests/integration/Cron/DaemonTest.php +++ b/tests/integration/Cron/DaemonTest.php @@ -51,7 +51,8 @@ class DaemonTest extends \MailPoetTest { 'createAuthorizedSendingEmailsCheckWorker' => $this->createSimpleWorkerMock(), 'createWooCommercePastOrdersWorker' => $this->createSimpleWorkerMock(), 'createBeamerkWorker' => $this->createSimpleWorkerMock(), - + 'createUnsubscribeTokensWorker' => $this->createSimpleWorkerMock(), + 'createSubscriberLinkTokensWorker' => $this->createSimpleWorkerMock(), ]); }