diff --git a/mailpoet/lib/API/JSON/v1/Newsletters.php b/mailpoet/lib/API/JSON/v1/Newsletters.php index e92172cf94..e47afc79cd 100644 --- a/mailpoet/lib/API/JSON/v1/Newsletters.php +++ b/mailpoet/lib/API/JSON/v1/Newsletters.php @@ -226,7 +226,7 @@ class Newsletters extends APIEndpoint { $task = $queue->getTask(); if ( $task && - $task->getScheduledAt() <= Carbon::createFromTimestamp($this->wp->currentTime('timestamp')) && + $task->getScheduledAt() <= Carbon::now()->millisecond(0) && $task->getStatus() === SendingQueueEntity::STATUS_SCHEDULED ) { $nextRunDate = $nextRunDate ? Carbon::createFromFormat('Y-m-d H:i:s', $nextRunDate) : null; diff --git a/mailpoet/lib/API/JSON/v1/Settings.php b/mailpoet/lib/API/JSON/v1/Settings.php index bed5c4b098..da019a3e81 100644 --- a/mailpoet/lib/API/JSON/v1/Settings.php +++ b/mailpoet/lib/API/JSON/v1/Settings.php @@ -29,7 +29,6 @@ use MailPoet\Subscribers\ConfirmationEmailCustomizer; use MailPoet\Subscribers\SubscribersCountsController; use MailPoet\Util\Notices\DisabledMailFunctionNotice; use MailPoet\WooCommerce\TransactionalEmails; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Doctrine\ORM\EntityManager; @@ -53,9 +52,6 @@ class Settings extends APIEndpoint { /** @var ServicesChecker */ private $servicesChecker; - /** @var WPFunctions */ - private $wp; - /** @var EntityManager */ private $entityManager; @@ -95,7 +91,6 @@ class Settings extends APIEndpoint { AuthorizedEmailsController $authorizedEmailsController, AuthorizedSenderDomainController $senderDomainController, TransactionalEmails $wcTransactionalEmails, - WPFunctions $wp, EntityManager $entityManager, NewslettersRepository $newslettersRepository, StatisticsOpensRepository $statisticsOpensRepository, @@ -114,7 +109,6 @@ class Settings extends APIEndpoint { $this->senderDomainController = $senderDomainController; $this->wcTransactionalEmails = $wcTransactionalEmails; $this->servicesChecker = $servicesChecker; - $this->wp = $wp; $this->entityManager = $entityManager; $this->newsletterRepository = $newslettersRepository; $this->statisticsOpensRepository = $statisticsOpensRepository; @@ -212,7 +206,7 @@ class Settings extends APIEndpoint { $task->setType(SubscribersEngagementScore::TASK_TYPE); $task->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED); } - $task->setScheduledAt(Carbon::createFromTimestamp($this->wp->currentTime('timestamp'))); + $task->setScheduledAt(Carbon::now()->millisecond(0)); $this->entityManager->persist($task); $this->entityManager->flush(); return $this->successResponse(); diff --git a/mailpoet/lib/Config/Populator.php b/mailpoet/lib/Config/Populator.php index 34e0b50521..dd3d796676 100644 --- a/mailpoet/lib/Config/Populator.php +++ b/mailpoet/lib/Config/Populator.php @@ -647,7 +647,7 @@ class Populator { private function scheduleInitialInactiveSubscribersCheck() { $this->scheduleTask( InactiveSubscribers::TASK_TYPE, - Carbon::createFromTimestamp($this->wp->currentTime('timestamp'))->addHour() + Carbon::now()->millisecond(0)->addHour() ); } @@ -657,7 +657,7 @@ class Populator { } $this->scheduleTask( AuthorizedSendingEmailsCheck::TASK_TYPE, - Carbon::createFromTimestamp($this->wp->currentTime('timestamp')) + Carbon::now()->millisecond(0) ); } @@ -665,7 +665,7 @@ class Populator { if (!$this->settings->get('last_announcement_date')) { $this->scheduleTask( Beamer::TASK_TYPE, - Carbon::createFromTimestamp($this->wp->currentTime('timestamp')) + Carbon::now()->millisecond(0) ); } } @@ -673,19 +673,19 @@ class Populator { private function scheduleUnsubscribeTokens() { $this->scheduleTask( UnsubscribeTokens::TASK_TYPE, - Carbon::createFromTimestamp($this->wp->currentTime('timestamp')) + Carbon::now()->millisecond(0) ); } private function scheduleSubscriberLinkTokens() { $this->scheduleTask( SubscriberLinkTokens::TASK_TYPE, - Carbon::createFromTimestamp($this->wp->currentTime('timestamp')) + Carbon::now()->millisecond(0) ); } private function scheduleMixpanel() { - $this->scheduleTask(Mixpanel::TASK_TYPE, Carbon::createFromTimestamp($this->wp->currentTime('timestamp'))); + $this->scheduleTask(Mixpanel::TASK_TYPE, Carbon::now()->millisecond(0)); } private function scheduleTask($type, $datetime, $priority = null) { @@ -723,14 +723,14 @@ class Populator { } $this->scheduleTask( SubscribersLastEngagement::TASK_TYPE, - Carbon::createFromTimestamp($this->wp->currentTime('timestamp')) + Carbon::now()->millisecond(0) ); } private function scheduleNewsletterTemplateThumbnails() { $this->scheduleTask( NewsletterTemplateThumbnails::TASK_TYPE, - Carbon::createFromTimestamp($this->wp->currentTime('timestamp')), + Carbon::now()->millisecond(0), ScheduledTaskEntity::PRIORITY_LOW ); } @@ -746,7 +746,7 @@ class Populator { } $this->scheduleTask( BackfillEngagementData::TASK_TYPE, - Carbon::createFromTimestamp($this->wp->currentTime('timestamp')) + Carbon::now()->millisecond(0) ); } } diff --git a/mailpoet/lib/Cron/CronWorkerRunner.php b/mailpoet/lib/Cron/CronWorkerRunner.php index 19dd08c656..319972ba41 100644 --- a/mailpoet/lib/Cron/CronWorkerRunner.php +++ b/mailpoet/lib/Cron/CronWorkerRunner.php @@ -5,7 +5,6 @@ namespace MailPoet\Cron; use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Logging\LoggerFactory; use MailPoet\Newsletter\Sending\ScheduledTasksRepository; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; class CronWorkerRunner { @@ -22,9 +21,6 @@ class CronWorkerRunner { /** @var CronWorkerScheduler */ private $cronWorkerScheduler; - /** @var WPFunctions */ - private $wp; - /** @var ScheduledTasksRepository */ private $scheduledTasksRepository; @@ -34,14 +30,12 @@ class CronWorkerRunner { public function __construct( CronHelper $cronHelper, CronWorkerScheduler $cronWorkerScheduler, - WPFunctions $wp, ScheduledTasksRepository $scheduledTasksRepository, LoggerFactory $loggerFactory ) { $this->timer = microtime(true); $this->cronHelper = $cronHelper; $this->cronWorkerScheduler = $cronWorkerScheduler; - $this->wp = $wp; $this->scheduledTasksRepository = $scheduledTasksRepository; $this->loggerFactory = $loggerFactory; } @@ -145,7 +139,7 @@ class CronWorkerRunner { } private function rescheduleOutdated(ScheduledTaskEntity $task) { - $currentTime = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $currentTime = Carbon::now()->millisecond(0); if (empty($task->getUpdatedAt())) { // missing updatedAt, consider this task outdated (set year to 2000) and reschedule @@ -186,7 +180,7 @@ class CronWorkerRunner { } private function complete(ScheduledTaskEntity $task) { - $task->setProcessedAt(Carbon::createFromTimestamp($this->wp->currentTime('timestamp'))); + $task->setProcessedAt(Carbon::now()->millisecond(0)); $task->setStatus(ScheduledTaskEntity::STATUS_COMPLETED); $this->scheduledTasksRepository->persist($task); $this->scheduledTasksRepository->flush(); diff --git a/mailpoet/lib/Cron/CronWorkerScheduler.php b/mailpoet/lib/Cron/CronWorkerScheduler.php index a5c9ae2966..11898f50ff 100644 --- a/mailpoet/lib/Cron/CronWorkerScheduler.php +++ b/mailpoet/lib/Cron/CronWorkerScheduler.php @@ -4,21 +4,15 @@ namespace MailPoet\Cron; use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Newsletter\Sending\ScheduledTasksRepository; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; class CronWorkerScheduler { - /** @var WPFunctions */ - private $wp; - /** @var ScheduledTasksRepository */ private $scheduledTaskRepository; public function __construct( - WPFunctions $wp, ScheduledTasksRepository $scheduledTaskRepository ) { - $this->wp = $wp; $this->scheduledTaskRepository = $scheduledTaskRepository; } @@ -28,7 +22,7 @@ class CronWorkerScheduler { if (($task instanceof ScheduledTaskEntity) && $task->getStatus() === null) { return $task; } - $now = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $now = Carbon::now()->millisecond(0); // Reschedule existing scheduled task if ($task instanceof ScheduledTaskEntity) { $task->setScheduledAt($now); @@ -55,7 +49,7 @@ class CronWorkerScheduler { } public function reschedule(ScheduledTaskEntity $task, $timeout) { - $scheduledAt = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $scheduledAt = Carbon::now()->millisecond(0); $task->setScheduledAt($scheduledAt->addMinutes($timeout)); $task->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED); $this->scheduledTaskRepository->persist($task); @@ -63,7 +57,7 @@ class CronWorkerScheduler { } public function rescheduleProgressively(ScheduledTaskEntity $task): int { - $scheduledAt = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $scheduledAt = Carbon::now()->millisecond(0); $rescheduleCount = $task->getRescheduleCount(); $timeout = (int)min(ScheduledTaskEntity::BASIC_RESCHEDULE_TIMEOUT * pow(2, $rescheduleCount), ScheduledTaskEntity::MAX_RESCHEDULE_TIMEOUT); $task->setScheduledAt($scheduledAt->addMinutes($timeout)); diff --git a/mailpoet/lib/Cron/Triggers/WordPress.php b/mailpoet/lib/Cron/Triggers/WordPress.php index 11c71de18b..eb794dfb54 100644 --- a/mailpoet/lib/Cron/Triggers/WordPress.php +++ b/mailpoet/lib/Cron/Triggers/WordPress.php @@ -253,7 +253,7 @@ class WordPress { GROUP BY type, status, scheduled_in"; $stmt = $this->entityManager->getConnection()->prepare($sql); - $stmt->bindValue('now', date('Y-m-d H:i:s', $this->wp->currentTime('timestamp'))); + $stmt->bindValue('now', date('Y-m-d H:i:s', $this->wp->currentTime('timestamp', true))); $stmt->bindValue('past', self::SCHEDULED_IN_THE_PAST); $stmt->bindValue('future', self::SCHEDULED_IN_THE_FUTURE); $stmt->bindValue('statusCompleted', ScheduledTaskEntity::STATUS_COMPLETED); diff --git a/mailpoet/lib/Cron/Workers/Automations/AbandonedCartWorker.php b/mailpoet/lib/Cron/Workers/Automations/AbandonedCartWorker.php index cab35e7f54..8b81c98b9e 100644 --- a/mailpoet/lib/Cron/Workers/Automations/AbandonedCartWorker.php +++ b/mailpoet/lib/Cron/Workers/Automations/AbandonedCartWorker.php @@ -9,21 +9,23 @@ use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\WP\Functions as WPFunctions; class AbandonedCartWorker extends SimpleWorker { - const TASK_TYPE = 'automation_abandoned_cart'; + const TASK_TYPE = 'automation_abandoned_cart'; - const ACTION = 'abandoned_cart'; + const ACTION = 'abandoned_cart'; - const AUTOMATIC_SCHEDULING = false; - const BATCH_SIZE = 1000; + const AUTOMATIC_SCHEDULING = false; + const BATCH_SIZE = 1000; - private $automationStorage; + private AutomationStorage $automationStorage; + private WPFunctions $wp; public function __construct( AutomationStorage $automationStorage, - WPFunctions $wp = null + WPFunctions $wp ) { - parent::__construct($wp); + parent::__construct(); $this->automationStorage = $automationStorage; + $this->wp = $wp; } public function checkProcessingRequirements() { diff --git a/mailpoet/lib/Cron/Workers/BackfillEngagementData.php b/mailpoet/lib/Cron/Workers/BackfillEngagementData.php index 1592f11505..49af0ccf28 100644 --- a/mailpoet/lib/Cron/Workers/BackfillEngagementData.php +++ b/mailpoet/lib/Cron/Workers/BackfillEngagementData.php @@ -4,7 +4,6 @@ namespace MailPoet\Cron\Workers; use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Subscribers\EngagementDataBackfiller; -use MailPoet\WP\Functions as WPFunctions; class BackfillEngagementData extends SimpleWorker { const TASK_TYPE = 'backfill_engagement_data'; @@ -16,10 +15,9 @@ class BackfillEngagementData extends SimpleWorker { private $engagementDataBackfiller; public function __construct( - EngagementDataBackfiller $engagementDataBackfiller, - WPFunctions $wp + EngagementDataBackfiller $engagementDataBackfiller ) { - parent::__construct($wp); + parent::__construct(); $this->engagementDataBackfiller = $engagementDataBackfiller; } diff --git a/mailpoet/lib/Cron/Workers/Beamer.php b/mailpoet/lib/Cron/Workers/Beamer.php index e2fade93ba..c173d5b26f 100644 --- a/mailpoet/lib/Cron/Workers/Beamer.php +++ b/mailpoet/lib/Cron/Workers/Beamer.php @@ -12,14 +12,15 @@ class Beamer extends SimpleWorker { const API_URL = 'https://api.getbeamer.com/v0'; const API_KEY = 'b_neUUX8kIYVEYZqQzSnwhmVggVLA6lT+GzDQOW7hrP38='; - /** @var SettingsController */ - private $settings; + private SettingsController $settings; + private WPFunctions $wp; public function __construct( SettingsController $settings, WPFunctions $wp ) { - parent::__construct($wp); + parent::__construct(); + $this->wp = $wp; $this->settings = $settings; } @@ -51,7 +52,7 @@ class Beamer extends SimpleWorker { public function getNextRunDate() { // once every two weeks on a random day of the week, random time of the day - $date = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $date = Carbon::now()->millisecond(0); return $date ->next(Carbon::MONDAY) ->startOfDay() diff --git a/mailpoet/lib/Cron/Workers/Bounce.php b/mailpoet/lib/Cron/Workers/Bounce.php index 85ee5c78cb..8cb47524f5 100644 --- a/mailpoet/lib/Cron/Workers/Bounce.php +++ b/mailpoet/lib/Cron/Workers/Bounce.php @@ -129,7 +129,7 @@ class Bounce extends SimpleWorker { } public function getNextRunDate() { - $date = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $date = Carbon::now()->millisecond(0); return $date->startOfDay() ->addDay() ->addHours(rand(0, 5)) diff --git a/mailpoet/lib/Cron/Workers/KeyCheck/KeyCheckWorker.php b/mailpoet/lib/Cron/Workers/KeyCheck/KeyCheckWorker.php index df739d4cb8..3f6b6c3abb 100644 --- a/mailpoet/lib/Cron/Workers/KeyCheck/KeyCheckWorker.php +++ b/mailpoet/lib/Cron/Workers/KeyCheck/KeyCheckWorker.php @@ -6,7 +6,6 @@ use MailPoet\Cron\CronWorkerScheduler; use MailPoet\Cron\Workers\SimpleWorker; use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Services\Bridge; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; abstract class KeyCheckWorker extends SimpleWorker { @@ -17,10 +16,9 @@ abstract class KeyCheckWorker extends SimpleWorker { protected $cronWorkerScheduler; public function __construct( - CronWorkerScheduler $cronWorkerScheduler, - WPFunctions $wp = null + CronWorkerScheduler $cronWorkerScheduler ) { - parent::__construct($wp); + parent::__construct(); $this->cronWorkerScheduler = $cronWorkerScheduler; } @@ -46,7 +44,7 @@ abstract class KeyCheckWorker extends SimpleWorker { } public function getNextRunDate() { - $date = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $date = Carbon::now()->millisecond(0); return $date->startOfDay() ->addDay() ->addHours(rand(0, 5)) diff --git a/mailpoet/lib/Cron/Workers/KeyCheck/SendingServiceKeyCheck.php b/mailpoet/lib/Cron/Workers/KeyCheck/SendingServiceKeyCheck.php index 2c401006f0..c386dc3e91 100644 --- a/mailpoet/lib/Cron/Workers/KeyCheck/SendingServiceKeyCheck.php +++ b/mailpoet/lib/Cron/Workers/KeyCheck/SendingServiceKeyCheck.php @@ -40,7 +40,7 @@ class SendingServiceKeyCheck extends KeyCheckWorker { public function getNextRunDate() { // when key pending approval, check key sate every hour if ($this->servicesChecker->isMailPoetAPIKeyPendingApproval()) { - $date = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $date = Carbon::now()->millisecond(0); return $date->addHour(); } return parent::getNextRunDate(); diff --git a/mailpoet/lib/Cron/Workers/Mixpanel.php b/mailpoet/lib/Cron/Workers/Mixpanel.php index 3a1aa2becd..4018f057a7 100644 --- a/mailpoet/lib/Cron/Workers/Mixpanel.php +++ b/mailpoet/lib/Cron/Workers/Mixpanel.php @@ -4,7 +4,6 @@ namespace MailPoet\Cron\Workers; use MailPoet\Analytics\Analytics; use MailPoet\Entities\ScheduledTaskEntity; -use MailPoet\WP\Functions; use Mixpanel as MixpanelLibrary; class Mixpanel extends SimpleWorker { @@ -16,14 +15,12 @@ class Mixpanel extends SimpleWorker { const TASK_TYPE = 'mixpanel'; - /** @var MixpanelLibrary */ - private $mixpanel; + private MixpanelLibrary $mixpanel; public function __construct( - Analytics $analytics, - Functions $wp + Analytics $analytics ) { - parent::__construct($wp); + parent::__construct(); $this->analytics = $analytics; $this->mixpanel = MixpanelLibrary::getInstance(self::PRODUCTION_PROJECT_ID); $this->mixpanel->register('Platform', 'Plugin'); diff --git a/mailpoet/lib/Cron/Workers/NewsletterTemplateThumbnails.php b/mailpoet/lib/Cron/Workers/NewsletterTemplateThumbnails.php index b49fbaaf77..fc14bb80f2 100644 --- a/mailpoet/lib/Cron/Workers/NewsletterTemplateThumbnails.php +++ b/mailpoet/lib/Cron/Workers/NewsletterTemplateThumbnails.php @@ -4,7 +4,6 @@ namespace MailPoet\Cron\Workers; use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\NewsletterTemplates\ThumbnailSaver; -use MailPoet\WP\Functions as WPFunctions; class NewsletterTemplateThumbnails extends SimpleWorker { const TASK_TYPE = 'newsletter_templates_thumbnails'; @@ -15,10 +14,9 @@ class NewsletterTemplateThumbnails extends SimpleWorker { private $thumbnailSaver; public function __construct( - ThumbnailSaver $thumbnailSaver, - WPFunctions $wp + ThumbnailSaver $thumbnailSaver ) { - parent::__construct($wp); + parent::__construct(); $this->thumbnailSaver = $thumbnailSaver; } diff --git a/mailpoet/lib/Cron/Workers/ReEngagementEmailsScheduler.php b/mailpoet/lib/Cron/Workers/ReEngagementEmailsScheduler.php index e78ea299c7..4820b2c870 100644 --- a/mailpoet/lib/Cron/Workers/ReEngagementEmailsScheduler.php +++ b/mailpoet/lib/Cron/Workers/ReEngagementEmailsScheduler.php @@ -25,6 +25,6 @@ class ReEngagementEmailsScheduler extends SimpleWorker { } public function getNextRunDate() { - return Carbon::createFromTimestamp($this->wp->currentTime('timestamp'))->addDay(); + return Carbon::now()->millisecond(0)->addDay(); } } diff --git a/mailpoet/lib/Cron/Workers/Scheduler.php b/mailpoet/lib/Cron/Workers/Scheduler.php index 6b74dadd39..b26f56f444 100644 --- a/mailpoet/lib/Cron/Workers/Scheduler.php +++ b/mailpoet/lib/Cron/Workers/Scheduler.php @@ -23,7 +23,6 @@ use MailPoet\Segments\SubscribersFinder; use MailPoet\Subscribers\SubscriberSegmentRepository; use MailPoet\Subscribers\SubscribersRepository; use MailPoet\Util\Security; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Doctrine\ORM\EntityNotFoundException; @@ -60,9 +59,6 @@ class Scheduler { /** @var NewsletterSegmentRepository */ private $newsletterSegmentRepository; - /** @var WPFunctions */ - private $wp; - /** @var Security */ private $security; @@ -86,7 +82,6 @@ class Scheduler { NewslettersRepository $newslettersRepository, SegmentsRepository $segmentsRepository, NewsletterSegmentRepository $newsletterSegmentRepository, - WPFunctions $wp, Security $security, NewsletterScheduler $scheduler, SubscriberSegmentRepository $subscriberSegmentRepository, @@ -102,7 +97,6 @@ class Scheduler { $this->newslettersRepository = $newslettersRepository; $this->segmentsRepository = $segmentsRepository; $this->newsletterSegmentRepository = $newsletterSegmentRepository; - $this->wp = $wp; $this->security = $security; $this->scheduler = $scheduler; $this->subscriberSegmentRepository = $subscriberSegmentRepository; @@ -400,7 +394,7 @@ class Scheduler { $notificationHistory->setUnsubscribeToken($this->security->generateUnsubscribeTokenByEntity($notificationHistory)); // reset timestamps - $createdAt = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $createdAt = Carbon::now()->millisecond(0); $notificationHistory->setCreatedAt($createdAt); $notificationHistory->setUpdatedAt($createdAt); $notificationHistory->setDeletedAt(null); diff --git a/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php b/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php index 592ee5bb26..6c4e3be158 100644 --- a/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php +++ b/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php @@ -602,7 +602,7 @@ class SendingQueue { } private function isTimeout(ScheduledTaskEntity $task): bool { - $currentTime = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $currentTime = Carbon::now()->millisecond(0); $updatedAt = new Carbon($task->getUpdatedAt()); if ($updatedAt->diffInSeconds($currentTime, false) > $this->getExecutionLimit()) { return true; diff --git a/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php b/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php index 9376a4e11c..41f46c3800 100644 --- a/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php +++ b/mailpoet/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php @@ -300,7 +300,7 @@ class Newsletter { $newsletter->getType() === NewsletterEntity::TYPE_NOTIFICATION_HISTORY ) { $newsletter->setStatus(NewsletterEntity::STATUS_SENT); - $newsletter->setSentAt(Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'))); + $newsletter->setSentAt(Carbon::now()->millisecond(0)); $this->newslettersRepository->persist($newsletter); $this->newslettersRepository->flush(); } diff --git a/mailpoet/lib/Cron/Workers/SimpleWorker.php b/mailpoet/lib/Cron/Workers/SimpleWorker.php index 26145e78d8..883486e1b7 100644 --- a/mailpoet/lib/Cron/Workers/SimpleWorker.php +++ b/mailpoet/lib/Cron/Workers/SimpleWorker.php @@ -9,7 +9,6 @@ use MailPoet\Cron\CronWorkerScheduler; use MailPoet\DI\ContainerWrapper; use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Newsletter\Sending\ScheduledTasksRepository; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; abstract class SimpleWorker implements CronWorkerInterface { @@ -25,21 +24,13 @@ abstract class SimpleWorker implements CronWorkerInterface { /** @var CronWorkerScheduler */ protected $cronWorkerScheduler; - /** @var WPFunctions */ - protected $wp; - /** @var ScheduledTasksRepository */ protected $scheduledTasksRepository; - public function __construct( - WPFunctions $wp = null - ) { + public function __construct() { if (static::TASK_TYPE === null) { throw new \Exception('Constant TASK_TYPE is not defined on subclass ' . get_class($this)); } - - if ($wp === null) $wp = ContainerWrapper::getInstance()->get(WPFunctions::class); - $this->wp = $wp; $this->cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class); $this->cronWorkerScheduler = ContainerWrapper::getInstance()->get(CronWorkerScheduler::class); $this->scheduledTasksRepository = ContainerWrapper::getInstance()->get(ScheduledTasksRepository::class); @@ -78,14 +69,14 @@ abstract class SimpleWorker implements CronWorkerInterface { public function getNextRunDate() { // random day of the next week - $date = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $date = Carbon::now()->millisecond(0); $date->setISODate((int)$date->format('o'), ((int)$date->format('W')) + 1, mt_rand(1, 7)); $date->startOfDay(); return $date; } protected function getNextRunDateImmediately(): Carbon { - return Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + return Carbon::now()->millisecond(0); } public function scheduleAutomatically() { diff --git a/mailpoet/lib/Cron/Workers/StatsNotifications/AutomatedEmails.php b/mailpoet/lib/Cron/Workers/StatsNotifications/AutomatedEmails.php index 2d19a4c5a7..462d315d0b 100644 --- a/mailpoet/lib/Cron/Workers/StatsNotifications/AutomatedEmails.php +++ b/mailpoet/lib/Cron/Workers/StatsNotifications/AutomatedEmails.php @@ -162,8 +162,7 @@ class AutomatedEmails extends SimpleWorker { } public function getNextRunDate() { - $wp = new WPFunctions; - $date = Carbon::createFromTimestamp($wp->currentTime('timestamp')); + $date = Carbon::now()->millisecond(0); return $date->endOfMonth()->next(Carbon::MONDAY)->midDay(); } } diff --git a/mailpoet/lib/Cron/Workers/StatsNotifications/Worker.php b/mailpoet/lib/Cron/Workers/StatsNotifications/Worker.php index 5184b1810c..cf8064b377 100644 --- a/mailpoet/lib/Cron/Workers/StatsNotifications/Worker.php +++ b/mailpoet/lib/Cron/Workers/StatsNotifications/Worker.php @@ -186,7 +186,7 @@ class Worker { private function markTaskAsFinished(ScheduledTaskEntity $task) { $task->setStatus(ScheduledTaskEntity::STATUS_COMPLETED); - $task->setProcessedAt(Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'))); + $task->setProcessedAt(Carbon::now()->millisecond(0)); $task->setScheduledAt(null); $this->entityManager->flush(); } diff --git a/mailpoet/lib/Cron/Workers/SubscriberLinkTokens.php b/mailpoet/lib/Cron/Workers/SubscriberLinkTokens.php index 46d9804d29..af0a276601 100644 --- a/mailpoet/lib/Cron/Workers/SubscriberLinkTokens.php +++ b/mailpoet/lib/Cron/Workers/SubscriberLinkTokens.php @@ -6,7 +6,6 @@ use MailPoet\DI\ContainerWrapper; use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\Subscribers\SubscribersRepository; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Doctrine\DBAL\ParameterType; use MailPoetVendor\Doctrine\ORM\EntityManager; @@ -41,7 +40,6 @@ class SubscriberLinkTokens extends SimpleWorker { } public function getNextRunDate() { - $wp = new WPFunctions(); - return Carbon::createFromTimestamp($wp->currentTime('timestamp')); + return Carbon::now()->millisecond(0); } } diff --git a/mailpoet/lib/Cron/Workers/SubscribersCountCacheRecalculation.php b/mailpoet/lib/Cron/Workers/SubscribersCountCacheRecalculation.php index 733fe2a9a6..8cd0444f27 100644 --- a/mailpoet/lib/Cron/Workers/SubscribersCountCacheRecalculation.php +++ b/mailpoet/lib/Cron/Workers/SubscribersCountCacheRecalculation.php @@ -7,7 +7,6 @@ use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Entities\SegmentEntity; use MailPoet\Segments\SegmentsRepository; use MailPoet\Subscribers\SubscribersCountsController; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; class SubscribersCountCacheRecalculation extends SimpleWorker { @@ -28,10 +27,9 @@ class SubscribersCountCacheRecalculation extends SimpleWorker { public function __construct( TransientCache $transientCache, SegmentsRepository $segmentsRepository, - SubscribersCountsController $subscribersCountsController, - WPFunctions $wp + SubscribersCountsController $subscribersCountsController ) { - parent::__construct($wp); + parent::__construct(); $this->transientCache = $transientCache; $this->segmentsRepository = $segmentsRepository; $this->subscribersCountsController = $subscribersCountsController; @@ -79,7 +77,7 @@ class SubscribersCountCacheRecalculation extends SimpleWorker { } public function getNextRunDate() { - return Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + return Carbon::now()->millisecond(0); } public function shouldBeScheduled(): bool { diff --git a/mailpoet/lib/Cron/Workers/SubscribersEngagementScore.php b/mailpoet/lib/Cron/Workers/SubscribersEngagementScore.php index c461463b5c..f84114c818 100644 --- a/mailpoet/lib/Cron/Workers/SubscribersEngagementScore.php +++ b/mailpoet/lib/Cron/Workers/SubscribersEngagementScore.php @@ -68,7 +68,7 @@ class SubscribersEngagementScore extends SimpleWorker { public function getNextRunDate() { // random day of the next week - $date = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $date = Carbon::now()->millisecond(0); $date->addDay(); $date->setTime(mt_rand(0, 23), mt_rand(0, 59)); return $date; diff --git a/mailpoet/lib/Cron/Workers/SubscribersStatsReport.php b/mailpoet/lib/Cron/Workers/SubscribersStatsReport.php index ce892425fb..8bdc4e1731 100644 --- a/mailpoet/lib/Cron/Workers/SubscribersStatsReport.php +++ b/mailpoet/lib/Cron/Workers/SubscribersStatsReport.php @@ -6,7 +6,6 @@ use MailPoet\Config\ServicesChecker; use MailPoet\Cron\CronWorkerScheduler; use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Services\SubscribersCountReporter; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; class SubscribersStatsReport extends SimpleWorker { @@ -24,10 +23,9 @@ class SubscribersStatsReport extends SimpleWorker { public function __construct( SubscribersCountReporter $subscribersCountReporter, ServicesChecker $servicesChecker, - CronWorkerScheduler $workerScheduler, - WPFunctions $wp + CronWorkerScheduler $workerScheduler ) { - parent::__construct($wp); + parent::__construct(); $this->subscribersCountReporter = $subscribersCountReporter; $this->serviceChecker = $servicesChecker; $this->workerScheduler = $workerScheduler; @@ -51,7 +49,7 @@ class SubscribersStatsReport extends SimpleWorker { } public function getNextRunDate() { - $date = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $date = Carbon::now()->millisecond(0); // Spread the check within 6 hours after midnight so that all plugins don't ping the service at the same time return $date->startOfDay() ->addDay() diff --git a/mailpoet/lib/Cron/Workers/UnsubscribeTokens.php b/mailpoet/lib/Cron/Workers/UnsubscribeTokens.php index 2744c0ac73..e311908c11 100644 --- a/mailpoet/lib/Cron/Workers/UnsubscribeTokens.php +++ b/mailpoet/lib/Cron/Workers/UnsubscribeTokens.php @@ -7,7 +7,6 @@ use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\InvalidStateException; use MailPoet\Util\Security; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Doctrine\ORM\EntityManager; @@ -23,11 +22,10 @@ class UnsubscribeTokens extends SimpleWorker { private $entityManager; public function __construct( - WPFunctions $wp, Security $security, EntityManager $entityManager ) { - parent::__construct($wp); + parent::__construct(); $this->security = $security; $this->entityManager = $entityManager; } @@ -93,6 +91,6 @@ class UnsubscribeTokens extends SimpleWorker { } public function getNextRunDate() { - return Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + return Carbon::now()->millisecond(0); } } diff --git a/mailpoet/lib/Cron/Workers/WooCommercePastOrders.php b/mailpoet/lib/Cron/Workers/WooCommercePastOrders.php index fb141e1f79..07842d2c74 100644 --- a/mailpoet/lib/Cron/Workers/WooCommercePastOrders.php +++ b/mailpoet/lib/Cron/Workers/WooCommercePastOrders.php @@ -75,6 +75,6 @@ class WooCommercePastOrders extends SimpleWorker { } public function getNextRunDate() { - return Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); // schedule immediately + return Carbon::now()->millisecond(0); // schedule immediately } } diff --git a/mailpoet/lib/Doctrine/EventListeners/LastSubscribedAtListener.php b/mailpoet/lib/Doctrine/EventListeners/LastSubscribedAtListener.php index 4b275d326f..66bb78a75e 100644 --- a/mailpoet/lib/Doctrine/EventListeners/LastSubscribedAtListener.php +++ b/mailpoet/lib/Doctrine/EventListeners/LastSubscribedAtListener.php @@ -11,7 +11,7 @@ class LastSubscribedAtListener { $entity = $eventArgs->getEntity(); if ($entity instanceof SubscriberEntity && $entity->getStatus() === SubscriberEntity::STATUS_SUBSCRIBED) { - $entity->setLastSubscribedAt(Carbon::now()); + $entity->setLastSubscribedAt(Carbon::now()->millisecond(0)); } } @@ -30,7 +30,7 @@ class LastSubscribedAtListener { [$oldStatus, $newStatus] = $changeSet['status']; // Update last_subscribed_at when status changes to subscribed if ($oldStatus !== SubscriberEntity::STATUS_SUBSCRIBED && $newStatus === SubscriberEntity::STATUS_SUBSCRIBED) { - $entity->setLastSubscribedAt(Carbon::now()); + $entity->setLastSubscribedAt(Carbon::now()->millisecond(0)); } } } diff --git a/mailpoet/lib/Doctrine/EventListeners/TimestampListener.php b/mailpoet/lib/Doctrine/EventListeners/TimestampListener.php index 223e84932f..7dff8ee016 100644 --- a/mailpoet/lib/Doctrine/EventListeners/TimestampListener.php +++ b/mailpoet/lib/Doctrine/EventListeners/TimestampListener.php @@ -43,6 +43,6 @@ class TimestampListener { } public function getNow(): \DateTimeInterface { - return Carbon::now(); + return Carbon::now()->millisecond(0); } } diff --git a/mailpoet/lib/Form/FormSaveController.php b/mailpoet/lib/Form/FormSaveController.php index 40fb0197c8..02628c75e8 100644 --- a/mailpoet/lib/Form/FormSaveController.php +++ b/mailpoet/lib/Form/FormSaveController.php @@ -3,7 +3,6 @@ namespace MailPoet\Form; use MailPoet\Entities\FormEntity; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Doctrine\ORM\EntityManager; @@ -11,15 +10,10 @@ class FormSaveController { /** @var EntityManager */ private $entityManager; - /** @var WPFunctions */ - private $wp; - public function __construct( - EntityManager $entityManager, - WPFunctions $wp + EntityManager $entityManager ) { $this->entityManager = $entityManager; - $this->wp = $wp; } public function duplicate(FormEntity $formEntity): FormEntity { @@ -28,7 +22,7 @@ class FormSaveController { $duplicate->setName(sprintf(__('Copy of %s', 'mailpoet'), $formEntity->getName())); // reset timestamps - $now = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $now = Carbon::now()->millisecond(0); $duplicate->setCreatedAt($now); $duplicate->setUpdatedAt($now); $duplicate->setDeletedAt(null); diff --git a/mailpoet/lib/Logging/LogRepository.php b/mailpoet/lib/Logging/LogRepository.php index c94b5ab344..f904ea4362 100644 --- a/mailpoet/lib/Logging/LogRepository.php +++ b/mailpoet/lib/Logging/LogRepository.php @@ -7,26 +7,13 @@ use MailPoet\Entities\LogEntity; use MailPoet\Entities\NewsletterEntity; use MailPoet\InvalidStateException; use MailPoet\Util\Helpers; -use MailPoet\WP\Functions; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Doctrine\DBAL\ParameterType; -use MailPoetVendor\Doctrine\ORM\EntityManager; /** * @extends Repository */ class LogRepository extends Repository { - /** @var Functions */ - private $wp; - - public function __construct( - EntityManager $entityManager, - Functions $wp - ) { - parent::__construct($entityManager); - $this->wp = $wp; - } - public function saveLog(LogEntity $log): void { // Save log entity using DBAL to avoid calling "flush()" on the entity manager. // Calling "flush()" can have unintended side effects, such as saving unwanted @@ -40,7 +27,7 @@ class LogRepository extends Repository { 'raw_message' => $log->getRawMessage(), 'context' => json_encode($log->getContext()), 'created_at' => ( - $log->getCreatedAt() ?? Carbon::createFromTimestamp($this->wp->currentTime('timestamp')) + $log->getCreatedAt() ?? Carbon::now()->millisecond(0) )->format('Y-m-d H:i:s'), ], ); diff --git a/mailpoet/lib/Newsletter/NewsletterSaveController.php b/mailpoet/lib/Newsletter/NewsletterSaveController.php index fb2e7f1434..9b31756754 100644 --- a/mailpoet/lib/Newsletter/NewsletterSaveController.php +++ b/mailpoet/lib/Newsletter/NewsletterSaveController.php @@ -171,7 +171,7 @@ class NewsletterSaveController { $duplicate = clone $newsletter; // reset timestamps - $createdAt = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $createdAt = Carbon::now()->millisecond(0); $duplicate->setCreatedAt($createdAt); $duplicate->setUpdatedAt($createdAt); $duplicate->setDeletedAt(null); diff --git a/mailpoet/lib/Newsletter/Scheduler/AutomationEmailScheduler.php b/mailpoet/lib/Newsletter/Scheduler/AutomationEmailScheduler.php index bb1247906b..7b319ef395 100644 --- a/mailpoet/lib/Newsletter/Scheduler/AutomationEmailScheduler.php +++ b/mailpoet/lib/Newsletter/Scheduler/AutomationEmailScheduler.php @@ -11,7 +11,6 @@ use MailPoet\Entities\SendingQueueEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\InvalidStateException; use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Doctrine\ORM\EntityManager; @@ -21,17 +20,12 @@ class AutomationEmailScheduler { private ScheduledTaskSubscribersRepository $scheduledTaskSubscribersRepository; - /** @var WPFunctions */ - private $wp; - public function __construct( EntityManager $entityManager, - ScheduledTaskSubscribersRepository $scheduledTaskSubscribersRepository, - WPFunctions $wp + ScheduledTaskSubscribersRepository $scheduledTaskSubscribersRepository ) { $this->entityManager = $entityManager; $this->scheduledTaskSubscribersRepository = $scheduledTaskSubscribersRepository; - $this->wp = $wp; } public function createSendingTask(NewsletterEntity $email, SubscriberEntity $subscriber, array $meta): ScheduledTaskEntity { @@ -45,7 +39,7 @@ class AutomationEmailScheduler { $task = new ScheduledTaskEntity(); $task->setType(SendingQueue::TASK_TYPE); $task->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED); - $task->setScheduledAt(Carbon::createFromTimestamp($this->wp->currentTime('timestamp'))); + $task->setScheduledAt(Carbon::now()->millisecond(0)); $task->setPriority(ScheduledTaskEntity::PRIORITY_MEDIUM); $task->setMeta($meta); $this->entityManager->persist($task); diff --git a/mailpoet/lib/Newsletter/Scheduler/ReEngagementScheduler.php b/mailpoet/lib/Newsletter/Scheduler/ReEngagementScheduler.php index 13614ed7ce..37b67b8b2f 100644 --- a/mailpoet/lib/Newsletter/Scheduler/ReEngagementScheduler.php +++ b/mailpoet/lib/Newsletter/Scheduler/ReEngagementScheduler.php @@ -13,7 +13,6 @@ use MailPoet\Entities\SubscriberEntity; use MailPoet\Entities\SubscriberSegmentEntity; use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\Sending\ScheduledTasksRepository; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Doctrine\DBAL\ParameterType; use MailPoetVendor\Doctrine\ORM\EntityManager; @@ -29,19 +28,14 @@ class ReEngagementScheduler { /** @var EntityManager */ private $entityManager; - /** @var WPFunctions */ - private $wp; - public function __construct( NewslettersRepository $newslettersRepository, ScheduledTasksRepository $scheduledTasksRepository, - EntityManager $entityManager, - WPFunctions $wp + EntityManager $entityManager ) { $this->newslettersRepository = $newslettersRepository; $this->scheduledTasksRepository = $scheduledTasksRepository; $this->entityManager = $entityManager; - $this->wp = $wp; } /** @@ -95,7 +89,7 @@ class ReEngagementScheduler { // Scheduled task $scheduledTask = new ScheduledTaskEntity(); $scheduledTask->setStatus(ScheduledTaskEntity::STATUS_SCHEDULED); - $scheduledTask->setScheduledAt(Carbon::createFromTimestamp($this->wp->currentTime('timestamp'))); + $scheduledTask->setScheduledAt(Carbon::now()->millisecond(0)); $scheduledTask->setType(SendingQueue::TASK_TYPE); $scheduledTask->setPriority(SendingQueueEntity::PRIORITY_MEDIUM); $this->scheduledTasksRepository->persist($scheduledTask); @@ -121,7 +115,7 @@ class ReEngagementScheduler { */ private function enqueueSubscribersForSegment(int $newsletterId, int $segmentId, ScheduledTaskEntity $scheduledTask, string $intervalUnit, int $intervalValue): int { // Parameters for scheduled task subscribers query - $thresholdDate = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $thresholdDate = Carbon::now()->millisecond(0); if ($intervalUnit === 'months') { $thresholdDate->subMonths($intervalValue); } else { @@ -130,7 +124,7 @@ class ReEngagementScheduler { $thresholdDateSql = $thresholdDate->toDateTimeString(); // When checking engagement, we ignore emails that subscribers received in the last 24 hours so that we leave them some time to engage. // This is prevention for sending re-engagement emails to subscribers who have received a single email very recently. - $upperThresholdDate = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $upperThresholdDate = Carbon::now()->millisecond(0); $upperThresholdDate->subDay(); $upperThresholdDate = $upperThresholdDate->toDateTimeString(); $taskId = $scheduledTask->getId(); @@ -139,7 +133,7 @@ class ReEngagementScheduler { $scheduledTaskSubscribersTable = $this->entityManager->getClassMetadata(ScheduledTaskSubscriberEntity::class)->getTableName(); $subscriberSegmentTable = $this->entityManager->getClassMetadata(SubscriberSegmentEntity::class)->getTableName(); $subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName(); - $nowSql = Carbon::createFromTimestamp($this->wp->currentTime('timestamp'))->toDateTimeString(); + $nowSql = Carbon::now()->millisecond(0)->toDateTimeString(); $query = "INSERT IGNORE INTO $scheduledTaskSubscribersTable (subscriber_id, task_id, processed, created_at) diff --git a/mailpoet/lib/Newsletter/Scheduler/Scheduler.php b/mailpoet/lib/Newsletter/Scheduler/Scheduler.php index 93f8ce9cc0..eedb608d12 100644 --- a/mailpoet/lib/Newsletter/Scheduler/Scheduler.php +++ b/mailpoet/lib/Newsletter/Scheduler/Scheduler.php @@ -33,7 +33,7 @@ class Scheduler { } public function getPreviousRunDate($schedule, $fromTimestamp = false) { - $fromTimestamp = ($fromTimestamp) ? $fromTimestamp : $this->wp->currentTime('timestamp'); + $fromTimestamp = ($fromTimestamp) ?: $this->wp->currentTime('timestamp', true); try { $schedule = \Cron\CronExpression::factory($schedule); $previousRunDate = $schedule->getPreviousRunDate(Carbon::createFromTimestamp($fromTimestamp)) @@ -45,7 +45,7 @@ class Scheduler { } public function getScheduledTimeWithDelay($afterTimeType, $afterTimeNumber): Carbon { - $currentTime = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $currentTime = Carbon::now()->millisecond(0); switch ($afterTimeType) { case 'minutes': $currentTime->addMinutes($afterTimeNumber); @@ -82,7 +82,7 @@ class Scheduler { * @return \DateTime|false */ public function getNextRunDateTime($schedule, $fromTimestamp = false) { - $fromTimestamp = $fromTimestamp ?: $this->wp->currentTime('timestamp'); + $fromTimestamp = $fromTimestamp ?: $this->wp->currentTime('timestamp', true); try { $schedule = \Cron\CronExpression::factory($schedule); $nextRunDate = $schedule->getNextRunDate(Carbon::createFromTimestamp($fromTimestamp)); diff --git a/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php b/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php index d58220a769..075fe1e1eb 100644 --- a/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php +++ b/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php @@ -7,7 +7,6 @@ use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Entities\ScheduledTaskSubscriberEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\InvalidStateException; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Doctrine\DBAL\ArrayParameterType; use MailPoetVendor\Doctrine\ORM\QueryBuilder; @@ -208,7 +207,7 @@ class ScheduledTaskSubscribersRepository extends Repository { $count = $this->countUnprocessed($task); if ($count === 0) { $task->setStatus(ScheduledTaskEntity::STATUS_COMPLETED); - $task->setProcessedAt(Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'))); + $task->setProcessedAt(Carbon::now()->millisecond(0)); $this->entityManager->flush(); } } diff --git a/mailpoet/lib/Newsletter/Sending/ScheduledTasksRepository.php b/mailpoet/lib/Newsletter/Sending/ScheduledTasksRepository.php index 266a9ca9ff..73fa52abe8 100644 --- a/mailpoet/lib/Newsletter/Sending/ScheduledTasksRepository.php +++ b/mailpoet/lib/Newsletter/Sending/ScheduledTasksRepository.php @@ -9,9 +9,7 @@ use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Entities\ScheduledTaskSubscriberEntity; use MailPoet\Entities\SendingQueueEntity; use MailPoet\Entities\SubscriberEntity; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; -use MailPoetVendor\Carbon\CarbonImmutable; use MailPoetVendor\Doctrine\DBAL\ArrayParameterType; use MailPoetVendor\Doctrine\ORM\EntityManager; use MailPoetVendor\Doctrine\ORM\Query\Expr\Join; @@ -27,15 +25,12 @@ class ScheduledTasksRepository extends Repository { null, ]; - private WPFunctions $wp; private SendingQueuesRepository $sendingQueuesRepository; public function __construct( EntityManager $entityManager, - WPFunctions $wp, SendingQueuesRepository $sendingQueuesRepository ) { - $this->wp = $wp; $this->sendingQueuesRepository = $sendingQueuesRepository; parent::__construct($entityManager); } @@ -311,7 +306,7 @@ class ScheduledTasksRepository extends Repository { } public function touchAllByIds(array $ids): void { - $now = CarbonImmutable::createFromTimestamp((int)$this->wp->currentTime('timestamp')); + $now = Carbon::now()->millisecond(0); $this->entityManager->createQueryBuilder() ->update(ScheduledTaskEntity::class, 'st') ->set('st.updatedAt', ':updatedAt') @@ -331,7 +326,7 @@ class ScheduledTasksRepository extends Repository { * @return ScheduledTaskEntity[] */ public function findScheduledSendingTasks(?int $limit = null): array { - $now = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $now = Carbon::now()->millisecond(0); return $this->doctrineRepository->createQueryBuilder('st') ->select('st') ->join('st.sendingQueue', 'sq') @@ -359,7 +354,7 @@ class ScheduledTasksRepository extends Repository { throw new \Exception(__('Only scheduled and running tasks can be cancelled', 'mailpoet'), 400); } $task->setStatus(ScheduledTaskEntity::STATUS_CANCELLED); - $task->setCancelledAt(Carbon::createFromTimestamp($this->wp->currentTime('timestamp'))); + $task->setCancelledAt(Carbon::now()->millisecond(0)); $this->persist($task); $this->flush(); } @@ -368,7 +363,7 @@ class ScheduledTasksRepository extends Repository { if ($task->getStatus() !== ScheduledTaskEntity::STATUS_CANCELLED) { throw new \Exception(__('Only cancelled tasks can be rescheduled', 'mailpoet'), 400); } - if ($task->getScheduledAt() <= Carbon::createFromTimestamp($this->wp->currentTime('timestamp'))) { + if ($task->getScheduledAt() <= Carbon::now()->millisecond(0)) { $task->setStatus(ScheduledTaskEntity::VIRTUAL_STATUS_RUNNING); $queue = $task->getSendingQueue(); if ($queue) { @@ -418,7 +413,7 @@ class ScheduledTasksRepository extends Repository { $queryBuilder->andWhere('st.scheduledAt <= :now'); } - $now = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $now = Carbon::now()->millisecond(0); $queryBuilder->setParameter('now', $now); if ($limit) { diff --git a/mailpoet/lib/Newsletter/Sending/SendingQueuesRepository.php b/mailpoet/lib/Newsletter/Sending/SendingQueuesRepository.php index a58b286550..cb23ba87d0 100644 --- a/mailpoet/lib/Newsletter/Sending/SendingQueuesRepository.php +++ b/mailpoet/lib/Newsletter/Sending/SendingQueuesRepository.php @@ -11,7 +11,6 @@ use MailPoet\Entities\SendingQueueEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\Logging\LoggerFactory; use MailPoet\Segments\DynamicSegments\FilterFactory; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Doctrine\ORM\EntityManager; @@ -22,9 +21,6 @@ class SendingQueuesRepository extends Repository { /** @var ScheduledTaskSubscribersRepository */ private $scheduledTaskSubscribersRepository; - /** @var WPFunctions */ - private $wp; - /** @var FilterFactory */ private $filterFactory; @@ -33,14 +29,12 @@ class SendingQueuesRepository extends Repository { public function __construct( EntityManager $entityManager, - WPFunctions $wp, ScheduledTaskSubscribersRepository $scheduledTaskSubscribersRepository, FilterFactory $filterFactory, LoggerFactory $loggerFactory ) { parent::__construct($entityManager); $this->scheduledTaskSubscribersRepository = $scheduledTaskSubscribersRepository; - $this->wp = $wp; $this->filterFactory = $filterFactory; $this->loggerFactory = $loggerFactory; } @@ -187,7 +181,7 @@ class SendingQueuesRepository extends Repository { if (!$task instanceof ScheduledTaskEntity) return; if ($queue->getCountProcessed() === $queue->getCountTotal()) { - $processedAt = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $processedAt = Carbon::now()->millisecond(0); $task->setProcessedAt($processedAt); $task->setStatus(ScheduledTaskEntity::STATUS_COMPLETED); // Update also status of newsletter if necessary diff --git a/mailpoet/lib/Newsletter/Shortcodes/Categories/Date.php b/mailpoet/lib/Newsletter/Shortcodes/Categories/Date.php index 688b6b5fd3..674e965186 100644 --- a/mailpoet/lib/Newsletter/Shortcodes/Categories/Date.php +++ b/mailpoet/lib/Newsletter/Shortcodes/Categories/Date.php @@ -34,10 +34,10 @@ class Date implements CategoryInterface { $date = $newsletter->getSentAt()->getTimestamp(); } if (!empty($actionMapping[$shortcodeDetails['action']])) { - return WPFunctions::get()->dateI18n($actionMapping[$shortcodeDetails['action']], $date); + return $wp->dateI18n($actionMapping[$shortcodeDetails['action']], $date); } return ($shortcodeDetails['action'] === 'custom' && $shortcodeDetails['action_argument'] === 'format') ? - WPFunctions::get()->dateI18n($shortcodeDetails['action_argument_value'], $date) : + $wp->dateI18n($shortcodeDetails['action_argument_value'], $date) : null; } } diff --git a/mailpoet/lib/Segments/WP.php b/mailpoet/lib/Segments/WP.php index bf9d323ead..848d6cd29c 100644 --- a/mailpoet/lib/Segments/WP.php +++ b/mailpoet/lib/Segments/WP.php @@ -159,7 +159,7 @@ class WP { // When WP Segment is disabled force trashed state and unconfirmed status for new WPUsers without active segment // or who are not WooCommerce customers at the same time since customers are added to the WooCommerce list if ($addingNewUserToDisabledWPSegment && !$otherActiveSegments && !$isWooCustomer) { - $data['deleted_at'] = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $data['deleted_at'] = Carbon::now()->millisecond(0); $data['status'] = SubscriberEntity::STATUS_UNCONFIRMED; } diff --git a/mailpoet/lib/Segments/WooCommerce.php b/mailpoet/lib/Segments/WooCommerce.php index df199e8e86..45e4d7f8fa 100644 --- a/mailpoet/lib/Segments/WooCommerce.php +++ b/mailpoet/lib/Segments/WooCommerce.php @@ -329,7 +329,7 @@ class WooCommerce { private function insertSubscribers(array $emails, string $status = SubscriberEntity::STATUS_SUBSCRIBED): int { $subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName(); $subscribersValues = []; - $now = (Carbon::createFromTimestamp($this->wp->currentTime('timestamp')))->format('Y-m-d H:i:s'); + $now = Carbon::now()->format('Y-m-d H:i:s'); $source = Source::WOOCOMMERCE_USER; foreach ($emails as $email) { /** @var string $email */ diff --git a/mailpoet/lib/Settings/SettingsChangeHandler.php b/mailpoet/lib/Settings/SettingsChangeHandler.php index 0a7a10038e..bedca658fd 100644 --- a/mailpoet/lib/Settings/SettingsChangeHandler.php +++ b/mailpoet/lib/Settings/SettingsChangeHandler.php @@ -9,7 +9,6 @@ use MailPoet\Mailer\Mailer; use MailPoet\Newsletter\Sending\ScheduledTasksRepository; use MailPoet\Services\Bridge; use MailPoet\Services\SubscribersCountReporter; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; class SettingsChangeHandler { @@ -47,7 +46,7 @@ class SettingsChangeHandler { if (!($task instanceof ScheduledTaskEntity)) { $task = $this->createScheduledTask(WooCommerceSync::TASK_TYPE); } - $datetime = Carbon::createFromTimestamp((int)WPFunctions::get()->currentTime('timestamp')); + $datetime = Carbon::now()->millisecond(0); $task->setScheduledAt($datetime->subMinute()); $this->scheduledTasksRepository->persist($task); $this->scheduledTasksRepository->flush(); @@ -62,7 +61,7 @@ class SettingsChangeHandler { if (!($task instanceof ScheduledTaskEntity)) { $task = $this->createScheduledTask(InactiveSubscribers::TASK_TYPE); } - $datetime = Carbon::createFromTimestamp((int)WPFunctions::get()->currentTime('timestamp')); + $datetime = Carbon::now()->millisecond(0); $task->setScheduledAt($datetime->subMinute()); $this->scheduledTasksRepository->persist($task); $this->scheduledTasksRepository->flush(); diff --git a/mailpoet/lib/Settings/SettingsRepository.php b/mailpoet/lib/Settings/SettingsRepository.php index 24b7e11350..042edcb51a 100644 --- a/mailpoet/lib/Settings/SettingsRepository.php +++ b/mailpoet/lib/Settings/SettingsRepository.php @@ -4,7 +4,6 @@ namespace MailPoet\Settings; use MailPoet\Doctrine\Repository; use MailPoet\Entities\SettingEntity; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Doctrine\ORM\Query; @@ -28,7 +27,7 @@ class SettingsRepository extends Repository { // Temporarily use low-level INSERT ... ON DUPLICATE KEY UPDATE query to avoid race conditions // between entity fetch and creation with multiple concurrent requests. This will be replaced // by a code solving atomicity of create-or-update on entity (ORM) level in a follow-up ticket. - $now = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp')); + $now = Carbon::now()->millisecond(0); $tableName = $this->entityManager->getClassMetadata(SettingEntity::class)->getTableName(); $this->entityManager->getConnection()->executeStatement(" INSERT INTO $tableName (name, value, created_at, updated_at) diff --git a/mailpoet/lib/Statistics/Track/SubscriberActivityTracker.php b/mailpoet/lib/Statistics/Track/SubscriberActivityTracker.php index b497def7e1..1f6c6fc789 100644 --- a/mailpoet/lib/Statistics/Track/SubscriberActivityTracker.php +++ b/mailpoet/lib/Statistics/Track/SubscriberActivityTracker.php @@ -67,7 +67,7 @@ class SubscriberActivityTracker { $latestTimestamp = $this->getLatestTimestampFromSubscriber($subscriber); } - if ($latestTimestamp + self::TRACK_INTERVAL > $this->wp->currentTime('timestamp')) { + if ($latestTimestamp + self::TRACK_INTERVAL > $this->wp->currentTime('timestamp', true)) { return false; } @@ -93,7 +93,7 @@ class SubscriberActivityTracker { private function processTracking(SubscriberEntity $subscriber): void { $this->subscribersRepository->maybeUpdateLastPageViewAt($subscriber); - $this->pageViewCookie->setPageViewTimestamp($this->wp->currentTime('timestamp')); + $this->pageViewCookie->setPageViewTimestamp($this->wp->currentTime('timestamp', true)); foreach ($this->callbacks as $callback) { $callback($subscriber); } diff --git a/mailpoet/lib/Subscribers/ImportExport/Import/Import.php b/mailpoet/lib/Subscribers/ImportExport/Import/Import.php index b1ade5fd68..d4608cf27e 100644 --- a/mailpoet/lib/Subscribers/ImportExport/Import/Import.php +++ b/mailpoet/lib/Subscribers/ImportExport/Import/Import.php @@ -108,8 +108,8 @@ class Import { array_keys($data['columns']) ); $this->subscribersCount = (reset($this->subscribersData) === false) ? 0 : count(reset($this->subscribersData)); - $this->createdAt = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp')); - $this->updatedAt = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp') + 1); + $this->createdAt = Carbon::now()->millisecond(0); + $this->updatedAt = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp', true) + 1); $this->requiredSubscribersFields = [ 'status' => SubscriberEntity::STATUS_SUBSCRIBED, 'first_name' => '', diff --git a/mailpoet/lib/Subscribers/SubscribersCountsController.php b/mailpoet/lib/Subscribers/SubscribersCountsController.php index 99308de442..eab3254a7b 100644 --- a/mailpoet/lib/Subscribers/SubscribersCountsController.php +++ b/mailpoet/lib/Subscribers/SubscribersCountsController.php @@ -8,10 +8,8 @@ use MailPoet\Entities\SubscriberEntity; use MailPoet\InvalidStateException; use MailPoet\Segments\SegmentsRepository; use MailPoet\Segments\SegmentSubscribersRepository; -use MailPoet\Subscribers\SubscribersRepository; use MailPoet\Tags\TagRepository; use MailPoet\Util\License\Features\Subscribers as SubscribersFeature; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; class SubscribersCountsController { @@ -33,17 +31,13 @@ class SubscribersCountsController { /** @var SubscribersFeature */ private $subscribersFeature; - /** @var WPFunctions */ - private $wp; - public function __construct( SegmentsRepository $segmentsRepository, SegmentSubscribersRepository $segmentSubscribersRepository, SubscribersRepository $subscribersRepository, TagRepository $subscriberTagRepository, TransientCache $transientCache, - SubscribersFeature $subscribersFeature, - WPFunctions $wp + SubscribersFeature $subscribersFeature ) { $this->segmentSubscribersRepository = $segmentSubscribersRepository; @@ -52,7 +46,6 @@ class SubscribersCountsController { $this->subscribersRepository = $subscribersRepository; $this->tagRepository = $subscriberTagRepository; $this->subscribersFeature = $subscribersFeature; - $this->wp = $wp; } public function getSubscribersWithoutSegmentStatisticsCount(): array { @@ -108,7 +101,7 @@ class SubscribersCountsController { } public function recalculateHomepageStatisticsCache(): array { - $thirtyDaysAgo = Carbon::createFromTimestamp($this->wp->currentTime('timestamp'))->subDays(30); + $thirtyDaysAgo = Carbon::now()->millisecond(0)->subDays(30); $result = []; $result['listsDataSubscribed'] = $this->subscribersRepository->getListLevelCountsOfSubscribedAfter($thirtyDaysAgo); $result['listsDataUnsubscribed'] = $this->subscribersRepository->getListLevelCountsOfUnsubscribedAfter($thirtyDaysAgo); diff --git a/mailpoet/lib/Subscribers/SubscribersRepository.php b/mailpoet/lib/Subscribers/SubscribersRepository.php index f8b7901f3b..5f757c87a3 100644 --- a/mailpoet/lib/Subscribers/SubscribersRepository.php +++ b/mailpoet/lib/Subscribers/SubscribersRepository.php @@ -16,7 +16,6 @@ use MailPoet\Segments\SegmentsRepository; use MailPoet\Util\License\Features\Subscribers; use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; -use MailPoetVendor\Carbon\CarbonImmutable; use MailPoetVendor\Doctrine\DBAL\ArrayParameterType; use MailPoetVendor\Doctrine\DBAL\ParameterType; use MailPoetVendor\Doctrine\ORM\EntityManager; @@ -673,7 +672,7 @@ class SubscribersRepository extends Repository { return count($subscribers); } - private function getCurrentDateTime(): CarbonImmutable { - return CarbonImmutable::createFromTimestamp((int)$this->wp->currentTime('timestamp')); + private function getCurrentDateTime(): Carbon { + return Carbon::now()->setMilliseconds(0); } } diff --git a/mailpoet/lib/Subscription/Pages.php b/mailpoet/lib/Subscription/Pages.php index bf052cf0b8..58b5f1387a 100644 --- a/mailpoet/lib/Subscription/Pages.php +++ b/mailpoet/lib/Subscription/Pages.php @@ -194,8 +194,8 @@ class Pages { $this->subscriber->setStatus(SubscriberEntity::STATUS_SUBSCRIBED); $this->subscriber->setConfirmedIp(Helpers::getIP()); - $this->subscriber->setConfirmedAt(Carbon::createFromTimestamp($this->wp->currentTime('timestamp'))); - $this->subscriber->setLastSubscribedAt(Carbon::createFromTimestamp($this->wp->currentTime('timestamp'))); + $this->subscriber->setConfirmedAt(Carbon::now()->millisecond(0)); + $this->subscriber->setLastSubscribedAt(Carbon::now()->millisecond(0)); $this->subscriber->setUnconfirmedData(null); try { diff --git a/mailpoet/lib/Util/Installation.php b/mailpoet/lib/Util/Installation.php index 8365e5235f..4ea9f6b44b 100644 --- a/mailpoet/lib/Util/Installation.php +++ b/mailpoet/lib/Util/Installation.php @@ -3,7 +3,6 @@ namespace MailPoet\Util; use MailPoet\Settings\SettingsController; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; class Installation { @@ -12,15 +11,10 @@ class Installation { /** @var SettingsController */ private $settings; - /** @var WPFunctions */ - private $wp; - public function __construct( - SettingsController $settings, - WPFunctions $wp + SettingsController $settings ) { $this->settings = $settings; - $this->wp = $wp; } public function isNewInstallation() { @@ -29,7 +23,7 @@ class Installation { return true; } $installedAt = Carbon::createFromTimestamp(strtotime($installedAt)); - $currentTime = Carbon::createFromTimestamp($this->wp->currentTime('timestamp')); + $currentTime = Carbon::now()->millisecond(0); return $currentTime->diffInDays($installedAt) <= self::NEW_INSTALLATION_DAYS_LIMIT; } } diff --git a/mailpoet/tests/integration/API/JSON/v1/SettingsTest.php b/mailpoet/tests/integration/API/JSON/v1/SettingsTest.php index b9f747ea84..b7c3f28a71 100644 --- a/mailpoet/tests/integration/API/JSON/v1/SettingsTest.php +++ b/mailpoet/tests/integration/API/JSON/v1/SettingsTest.php @@ -30,7 +30,6 @@ use MailPoet\Statistics\StatisticsOpensRepository; use MailPoet\Subscribers\ConfirmationEmailCustomizer; use MailPoet\Subscribers\SubscribersCountsController; use MailPoet\WooCommerce\TransactionalEmails; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Doctrine\ORM\EntityManager; @@ -60,7 +59,6 @@ class SettingsTest extends \MailPoetTest { $this->make(AuthorizedEmailsController::class, ['onSettingsSave' => null]), $this->diContainer->get(AuthorizedSenderDomainController::class), $this->make(TransactionalEmails::class), - WPFunctions::get(), $this->diContainer->get(EntityManager::class), $this->diContainer->get(NewslettersRepository::class), $this->diContainer->get(StatisticsOpensRepository::class), @@ -105,7 +103,6 @@ class SettingsTest extends \MailPoetTest { $this->make(AuthorizedEmailsController::class, ['onSettingsSave' => Expected::once()]), $this->diContainer->get(AuthorizedSenderDomainController::class), $this->make(TransactionalEmails::class), - WPFunctions::get(), $this->diContainer->get(EntityManager::class), $this->diContainer->get(NewslettersRepository::class), $this->diContainer->get(StatisticsOpensRepository::class), @@ -142,7 +139,6 @@ class SettingsTest extends \MailPoetTest { new AuthorizedEmailsController($this->settings, $bridgeMock, $this->diContainer->get(NewslettersRepository::class), $senderDomainController), $this->diContainer->get(AuthorizedSenderDomainController::class), $this->make(TransactionalEmails::class), - WPFunctions::get(), $this->diContainer->get(EntityManager::class), $this->diContainer->get(NewslettersRepository::class), $this->diContainer->get(StatisticsOpensRepository::class), @@ -174,7 +170,6 @@ class SettingsTest extends \MailPoetTest { new AuthorizedEmailsController($this->settings, $bridgeMock, $this->diContainer->get(NewslettersRepository::class), $senderDomainController), $this->diContainer->get(AuthorizedSenderDomainController::class), $this->make(TransactionalEmails::class), - WPFunctions::get(), $this->diContainer->get(EntityManager::class), $this->diContainer->get(NewslettersRepository::class), $this->diContainer->get(StatisticsOpensRepository::class), @@ -208,7 +203,6 @@ class SettingsTest extends \MailPoetTest { new AuthorizedEmailsController($this->settings, $bridgeMock, $this->diContainer->get(NewslettersRepository::class), $senderDomainController), $this->diContainer->get(AuthorizedSenderDomainController::class), $this->make(TransactionalEmails::class), - WPFunctions::get(), $this->diContainer->get(EntityManager::class), $this->diContainer->get(NewslettersRepository::class), $this->diContainer->get(StatisticsOpensRepository::class), @@ -321,7 +315,6 @@ class SettingsTest extends \MailPoetTest { $this->make(AuthorizedEmailsController::class, ['onSettingsSave' => Expected::once()]), $this->diContainer->get(AuthorizedSenderDomainController::class), $this->make(TransactionalEmails::class), - WPFunctions::get(), $this->diContainer->get(EntityManager::class), $this->diContainer->get(NewslettersRepository::class), $this->diContainer->get(StatisticsOpensRepository::class), diff --git a/mailpoet/tests/integration/Cron/CronWorkerRunnerTest.php b/mailpoet/tests/integration/Cron/CronWorkerRunnerTest.php index c8ec24a4c3..063c95a8cb 100644 --- a/mailpoet/tests/integration/Cron/CronWorkerRunnerTest.php +++ b/mailpoet/tests/integration/Cron/CronWorkerRunnerTest.php @@ -12,7 +12,6 @@ use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Logging\LoggerFactory; use MailPoet\Newsletter\Sending\ScheduledTasksRepository; use MailPoet\Test\DataFactories\ScheduledTask as ScheduledTaskFactory; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; require_once __DIR__ . '/Workers/SimpleWorkerMockImplementation.php'; @@ -33,7 +32,6 @@ class CronWorkerRunnerTest extends \MailPoetTest { $this->cronWorkerRunner = new CronWorkerRunner( $this->cronHelper, $this->diContainer->get(CronWorkerScheduler::class), - $this->diContainer->get(WPFunctions::class), $this->scheduledTasksRepository, $this->diContainer->get(LoggerFactory::class) ); diff --git a/mailpoet/tests/integration/Cron/Workers/SubscribersStatsReportTest.php b/mailpoet/tests/integration/Cron/Workers/SubscribersStatsReportTest.php index c5b39f4b76..ba97bbb3af 100644 --- a/mailpoet/tests/integration/Cron/Workers/SubscribersStatsReportTest.php +++ b/mailpoet/tests/integration/Cron/Workers/SubscribersStatsReportTest.php @@ -6,7 +6,6 @@ use MailPoet\Config\ServicesChecker; use MailPoet\Cron\CronWorkerScheduler; use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Services\SubscribersCountReporter; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use PHPUnit\Framework\MockObject\MockObject; @@ -29,20 +28,15 @@ class SubscribersStatsReportTest extends \MailPoetTest { /** @var ServicesChecker & MockObject */ private $servicesCheckerMock; - /** @var WPFunctions & MockObject */ - private $wpMock; - public function _before() { parent::_before(); $this->countReporerMock = $this->createMock(SubscribersCountReporter::class); $this->schedulerMock = $this->createMock(CronWorkerScheduler::class); $this->servicesCheckerMock = $this->createMock(ServicesChecker::class); - $this->wpMock = $this->createMock(WPFunctions::class); $this->worker = new SubscribersStatsReport( $this->countReporerMock, $this->servicesCheckerMock, $this->schedulerMock, - $this->wpMock ); } @@ -99,10 +93,8 @@ class SubscribersStatsReportTest extends \MailPoetTest { public function testItGeneratesRandomNextRunDate() { $time = time(); + Carbon::setTestNow(Carbon::createFromTimestamp($time)); $maxExpectedScheduleInterval = 30 * 60 * 60; // 30 hours - $this->wpMock->expects($this->exactly(2)) - ->method('currentTime') - ->willReturn($time); $result = $this->worker->getNextRunDate(); verify($result)->instanceOf(Carbon::class); verify($result->getTimestamp())->greaterThan($time); @@ -112,5 +104,6 @@ class SubscribersStatsReportTest extends \MailPoetTest { verify($result2->getTimestamp())->greaterThan($time); verify($result2->getTimestamp())->lessThan($time + $maxExpectedScheduleInterval); verify($result2->getTimestamp())->notEquals($result->getTimestamp()); + Carbon::setTestNow(); } } diff --git a/mailpoet/tests/integration/Doctrine/EventListeners/ValidationTest.php b/mailpoet/tests/integration/Doctrine/EventListeners/ValidationTest.php index ed1e932c9c..ecb692bce5 100644 --- a/mailpoet/tests/integration/Doctrine/EventListeners/ValidationTest.php +++ b/mailpoet/tests/integration/Doctrine/EventListeners/ValidationTest.php @@ -113,7 +113,7 @@ class ValidationTest extends \MailPoetTest { $timestampListener = new TimestampListener(); $validationListener = new ValidationListener($validatorFactory->createValidator()); $emojiEncodingListener = new EmojiEncodingListener(new Emoji($this->wp)); - $lastSubscribedAtListener = new LastSubscribedAtListener($this->wp); + $lastSubscribedAtListener = new LastSubscribedAtListener(); $newsletterListener = new NewsletterListener($this->wp); $subscriberListener = new SubscriberListener(new SubscriberChangesNotifier($this->wp)); $entityManagerFactory = new EntityManagerFactory( diff --git a/mailpoet/tests/integration/Doctrine/Types/JsonTypesTest.php b/mailpoet/tests/integration/Doctrine/Types/JsonTypesTest.php index 9d205cfe31..b2354703d7 100644 --- a/mailpoet/tests/integration/Doctrine/Types/JsonTypesTest.php +++ b/mailpoet/tests/integration/Doctrine/Types/JsonTypesTest.php @@ -191,7 +191,7 @@ class JsonTypesTest extends \MailPoetTest { $timestampListener = new TimestampListener(); $validationListener = new ValidationListener($validatorFactory->createValidator()); $emojiEncodingListener = new EmojiEncodingListener(new Emoji($this->wp)); - $lastSubscribedAtListener = new LastSubscribedAtListener($this->wp); + $lastSubscribedAtListener = new LastSubscribedAtListener(); $subscriberListener = new SubscriberListener(new SubscriberChangesNotifier($this->wp)); $newsletterListener = new NewsletterListener($this->wp); $entityManagerFactory = new EntityManagerFactory( diff --git a/mailpoet/tests/integration/Logging/LogHandlerTest.php b/mailpoet/tests/integration/Logging/LogHandlerTest.php index 0875f7303c..5f76dd523d 100644 --- a/mailpoet/tests/integration/Logging/LogHandlerTest.php +++ b/mailpoet/tests/integration/Logging/LogHandlerTest.php @@ -5,7 +5,6 @@ namespace MailPoet\Logging; use MailPoet\Doctrine\EntityManagerFactory; use MailPoet\Entities\LogEntity; use MailPoet\Entities\SubscriberEntity; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Doctrine\ORM\EntityManager; @@ -104,7 +103,7 @@ class LogHandlerTest extends \MailPoetTest { public function testItResilientToSqlError(): void { $entityManager = $this->entityManagerFactory->createEntityManager(); - $logRepository = new LogRepository($entityManager, new WPFunctions()); + $logRepository = new LogRepository($entityManager); $logHandler = new LogHandler($logRepository); $time = new \DateTime(); diff --git a/mailpoet/tests/integration/Migrations/App/Migration_20221028_105818_App_Test.php b/mailpoet/tests/integration/Migrations/App/Migration_20221028_105818_App_Test.php index dd4386c955..f1edda9428 100644 --- a/mailpoet/tests/integration/Migrations/App/Migration_20221028_105818_App_Test.php +++ b/mailpoet/tests/integration/Migrations/App/Migration_20221028_105818_App_Test.php @@ -2,7 +2,6 @@ namespace MailPoet\Migrations\App; -use Codeception\Stub; use MailPoet\Cron\Workers\InactiveSubscribers; use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Newsletter\Sending\ScheduledTasksRepository; @@ -68,14 +67,7 @@ class Migration_20221028_105818_App_Test extends \MailPoetTest { public function testItCreatesInactiveSubscribersTaskIfOneNotAlreadyScheduled() { $this->settings->delete('deactivate_subscriber_after_inactive_days'); $currentTime = Carbon::now()->microsecond(0); - - /** @var WPFunctions $wpStub */ - $wpStub = Stub::make(new WPFunctions(), [ - 'currentTime' => asCallable(function() use ($currentTime) { - return $currentTime->getTimestamp(); - }), - ]); - WPFunctions::set($wpStub); + Carbon::setTestNow($currentTime); // Double check there isn't already a task in the DB $scheduledTasksRepository = $this->diContainer->get(ScheduledTasksRepository::class); @@ -95,19 +87,14 @@ class Migration_20221028_105818_App_Test extends \MailPoetTest { ]); $this->assertNotNull($task); $this->assertEquals($currentTime->subMinute(), $task->getScheduledAt()); + Carbon::setTestNow(); } public function testItReschedulesScheduledInactiveSubscribersTask() { $this->settings->delete('deactivate_subscriber_after_inactive_days'); $currentTime = Carbon::now()->microsecond(0); + Carbon::setTestNow($currentTime); - /** @var WPFunctions $wpStub */ - $wpStub = Stub::make(new WPFunctions(), [ - 'currentTime' => asCallable(function() use ($currentTime) { - return $currentTime->getTimestamp(); - }), - ]); - WPFunctions::set($wpStub); $twoHoursFromNow = $currentTime->copy()->addHours(2); // Create existing task scheduled for the future @@ -125,6 +112,7 @@ class Migration_20221028_105818_App_Test extends \MailPoetTest { $this->migration->run(); $this->assertEquals($currentTime->subMinute(), $existingTask->getScheduledAt()); + Carbon::setTestNow(); } public function testItMigratesTrackingSettings() { diff --git a/mailpoet/tests/integration/Statistics/Track/OpensTest.php b/mailpoet/tests/integration/Statistics/Track/OpensTest.php index 9aa02079cc..a2d5e33666 100644 --- a/mailpoet/tests/integration/Statistics/Track/OpensTest.php +++ b/mailpoet/tests/integration/Statistics/Track/OpensTest.php @@ -4,7 +4,6 @@ namespace MailPoet\Test\Statistics\Track; use Codeception\Stub; use Codeception\Stub\Expected; -use MailPoet\Config\SubscriberChangesNotifier; use MailPoet\Cron\Workers\SendingQueue\SendingQueue; use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\ScheduledTaskEntity; @@ -17,7 +16,6 @@ use MailPoet\Statistics\Track\Opens; use MailPoet\Statistics\UserAgentsRepository; use MailPoet\Subscribers\LinkTokens; use MailPoet\Subscribers\SubscribersRepository; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; class OpensTest extends \MailPoetTest { @@ -357,22 +355,13 @@ class OpensTest extends \MailPoetTest { } public function testItUpdatesSubscriberEngagementForHumanAgent() { - $now = Carbon::now(); - $wpMock = $this->createMock(WPFunctions::class); - $wpMock->expects($this->once()) - ->method('currentTime') - ->willReturn($now->getTimestamp()); + $now = Carbon::createFromTimestamp(time()); + Carbon::setTestNow($now); $this->trackData->userAgent = 'User agent'; $opens = Stub::construct($this->opens, [ $this->diContainer->get(StatisticsOpensRepository::class), $this->diContainer->get(UserAgentsRepository::class), - $this->getServiceWithOverrides( - SubscribersRepository::class, - [ - 'changesNotifier' => new SubscriberChangesNotifier($wpMock), - 'wp' => $wpMock, - ] - ), + $this->diContainer->get(SubscribersRepository::class), ], [ 'returnResponse' => null, ], $this); @@ -384,25 +373,17 @@ class OpensTest extends \MailPoetTest { $this->assertInstanceOf(\DateTimeInterface::class, $savedOpenTime); verify($savedEngagementTime->getTimestamp())->equals($now->getTimestamp()); verify($savedOpenTime->getTimestamp())->equals($now->getTimestamp()); + Carbon::setTestNow(); } public function testItUpdatesSubscriberEngagementForUnknownAgent() { - $now = Carbon::now(); - $wpMock = $this->createMock(WPFunctions::class); - $wpMock->expects($this->once()) - ->method('currentTime') - ->willReturn($now->getTimestamp()); + $now = Carbon::createFromTimestamp(time()); + Carbon::setTestNow($now); $this->trackData->userAgent = null; $opens = Stub::construct($this->opens, [ $this->diContainer->get(StatisticsOpensRepository::class), $this->diContainer->get(UserAgentsRepository::class), - $this->getServiceWithOverrides( - SubscribersRepository::class, - [ - 'changesNotifier' => new SubscriberChangesNotifier($wpMock), - 'wp' => $wpMock, - ] - ), + $this->diContainer->get(SubscribersRepository::class), ], [ 'returnResponse' => null, ], $this); @@ -414,25 +395,17 @@ class OpensTest extends \MailPoetTest { $this->assertInstanceOf(\DateTimeInterface::class, $savedOpenTime); verify($savedEngagementTime->getTimestamp())->equals($now->getTimestamp()); verify($savedOpenTime->getTimestamp())->equals($now->getTimestamp()); + Carbon::setTestNow(); } public function testItUpdatesSubscriberTimestampsForMachineAgent() { - $now = Carbon::now(); - $wpMock = $this->createMock(WPFunctions::class); - $wpMock->expects($this->once()) - ->method('currentTime') - ->willReturn($now->getTimestamp()); + $now = Carbon::createFromTimestamp(time()); + Carbon::setTestNow($now); $this->trackData->userAgent = UserAgentEntity::MACHINE_USER_AGENTS[0]; $opens = Stub::construct($this->opens, [ $this->diContainer->get(StatisticsOpensRepository::class), $this->diContainer->get(UserAgentsRepository::class), - $this->getServiceWithOverrides( - SubscribersRepository::class, - [ - 'changesNotifier' => new SubscriberChangesNotifier($wpMock), - 'wp' => $wpMock, - ] - ), + $this->diContainer->get(SubscribersRepository::class), ], [ 'returnResponse' => null, ], $this); @@ -444,5 +417,6 @@ class OpensTest extends \MailPoetTest { $this->assertInstanceOf(\DateTimeInterface::class, $savedOpenTime); verify($savedEngagementTime->getTimestamp())->equals($now->getTimestamp()); verify($savedOpenTime->getTimestamp())->equals($now->getTimestamp()); + Carbon::setTestNow(); } } diff --git a/mailpoet/tests/integration/WooCommerce/SubscriberEngagementTest.php b/mailpoet/tests/integration/WooCommerce/SubscriberEngagementTest.php index a9da5efbce..e698e0e547 100644 --- a/mailpoet/tests/integration/WooCommerce/SubscriberEngagementTest.php +++ b/mailpoet/tests/integration/WooCommerce/SubscriberEngagementTest.php @@ -3,10 +3,8 @@ namespace MailPoet\WooCommerce; use DateTimeInterface; -use MailPoet\Config\SubscriberChangesNotifier; use MailPoet\Entities\SubscriberEntity; use MailPoet\Subscribers\SubscribersRepository; -use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use PHPUnit\Framework\MockObject\MockObject; use WC_Order; @@ -15,10 +13,6 @@ use WC_Order; * @group woo */ class SubscriberEngagementTest extends \MailPoetTest { - - /** @var WPFunctions & MockObject */ - private $wpMock; - /** @var Helper & MockObject */ private $wooCommerceHelperMock; @@ -27,25 +21,15 @@ class SubscriberEngagementTest extends \MailPoetTest { public function _before() { $this->wooCommerceHelperMock = $this->createMock(Helper::class); - $this->wpMock = $this->createMock(WPFunctions::class); - $subscribersRepository = $this->getServiceWithOverrides( - SubscribersRepository::class, - [ - 'changesNotifier' => new SubscriberChangesNotifier($this->wpMock), - 'wp' => $this->wpMock, - ] - ); $this->subscriberEngagement = new SubscriberEngagement( $this->wooCommerceHelperMock, - $subscribersRepository + $this->diContainer->get(SubscribersRepository::class), ); } public function testItUpdatesLastEngagementForSubscriberWhoCreatedNewOrder() { $now = new Carbon('2021-08-31 13:13:00'); - $this->wpMock->expects($this->once()) - ->method('currentTime') - ->willReturn($now->getTimestamp()); + Carbon::setTestNow($now); $subscriber = $this->createSubscriber(); $order = $this->createOrderMock($subscriber->getEmail()); $this->wooCommerceHelperMock @@ -55,6 +39,7 @@ class SubscriberEngagementTest extends \MailPoetTest { $this->subscriberEngagement->updateSubscriberEngagement(1); $this->entityManager->refresh($subscriber); verify($subscriber->getLastEngagementAt())->equals($now); + Carbon::setTestNow(); } public function testItDoesntUpdateAnythingForNonExistingOrder() {