Compare commits

...

6 Commits

Author SHA1 Message Date
Brezo Cordero
1ee452c37a Release 3.99.1 2022-09-29 14:30:02 -05:00
Jan Jakes
1726c8de07 Add migration for notification history records that are stuck in sending status
[MAILPOET-4685]
2022-09-29 15:23:26 -03:00
Jan Lysý
12b1bf4698 Add check that newsletter history record is not deleted
[MAILPOET-4685]
2022-09-29 15:23:16 -03:00
Jan Lysý
b79188e262 Rename method in repository
[MAILPOET-4685]
2022-09-29 15:23:05 -03:00
Jan Lysý
6246c154ae Use processedAt from the correct model
[MAILPOET-4685]
2022-09-29 15:23:00 -03:00
Jan Lysý
932aa2167d Add refreshing sending queue
Because we are still working with old model on some places, it's necessary to refresh both sides of the relation.
[MAILPOET-4685]
2022-09-29 15:22:55 -03:00
11 changed files with 55 additions and 25 deletions

View File

@@ -200,6 +200,7 @@ class Populator {
$this->moveNewsletterTemplatesThumbnailData();
$this->scheduleNewsletterTemplateThumbnails();
$this->updateToUnifiedTrackingSettings();
$this->fixNotificationHistoryRecordsStuckAtSending();
}
private function createMailPoetPage() {
@@ -982,4 +983,32 @@ class Populator {
}
$this->settings->set('tracking.level', $trackingLevel);
}
private function fixNotificationHistoryRecordsStuckAtSending() {
// perform once for versions below or equal to 3.99.0
if (version_compare((string)$this->settings->get('db_version', '3.99.1'), '3.99.0', '>')) {
return false;
}
$newsletters = $this->entityManager->getClassMetadata(NewsletterEntity::class)->getTableName();
$queues = $this->entityManager->getClassMetadata(SendingQueueEntity::class)->getTableName();
$tasks = $this->entityManager->getClassMetadata(ScheduledTaskEntity::class)->getTableName();
$this->entityManager->getConnection()->executeStatement("
UPDATE {$newsletters} n
JOIN {$queues} q ON n.id = q.newsletter_id
JOIN {$tasks} t ON q.task_id = t.id
SET n.status = :sentStatus
WHERE n.type = :type
AND n.status = :sendingStatus
AND t.status = :taskStatus
", [
'type' => NewsletterEntity::TYPE_NOTIFICATION_HISTORY,
'sendingStatus' => NewsletterEntity::STATUS_SENDING,
'sentStatus' => NewsletterEntity::STATUS_SENT,
'taskStatus' => ScheduledTaskEntity::STATUS_COMPLETED,
]);
return true;
}
}

View File

@@ -20,6 +20,7 @@ use MailPoet\Newsletter\Scheduler\Scheduler as NewsletterScheduler;
use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
use MailPoet\Newsletter\Segment\NewsletterSegmentRepository;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoet\Segments\SegmentsRepository;
use MailPoet\Segments\SubscribersFinder;
use MailPoet\Tasks\Sending as SendingTask;
@@ -54,6 +55,9 @@ class Scheduler {
/** @var NewsletterSegmentRepository */
private $newsletterSegmentRepository;
/** @var SendingQueuesRepository */
private $sendingQueuesRepository;
/** @var WPFunctions */
private $wp;
@@ -72,6 +76,7 @@ class Scheduler {
NewslettersRepository $newslettersRepository,
SegmentsRepository $segmentsRepository,
NewsletterSegmentRepository $newsletterSegmentRepository,
SendingQueuesRepository $sendingQueuesRepository,
WPFunctions $wp,
Security $security,
NewsletterScheduler $scheduler
@@ -84,6 +89,7 @@ class Scheduler {
$this->newslettersRepository = $newslettersRepository;
$this->segmentsRepository = $segmentsRepository;
$this->newsletterSegmentRepository = $newsletterSegmentRepository;
$this->sendingQueuesRepository = $sendingQueuesRepository;
$this->wp = $wp;
$this->security = $security;
$this->scheduler = $scheduler;
@@ -211,6 +217,7 @@ class Scheduler {
// Because there is mixed usage of the old and new model, we want to be sure about the correct state
$this->newslettersRepository->refresh($notificationHistory);
$this->sendingQueuesRepository->refresh($queue->getSendingQueueEntity());
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_POST_NOTIFICATIONS)->info(
'post notification set status to sending',

View File

@@ -250,9 +250,9 @@ class Newsletter {
$newsletter->getType() === NewsletterEntity::TYPE_STANDARD ||
$newsletter->getType() === NewsletterEntity::TYPE_NOTIFICATION_HISTORY
) {
$sendingQueue = $sendingTask->queue();
$scheduledTask = $sendingTask->task();
$newsletter->setStatus(NewsletterEntity::STATUS_SENT);
$newsletter->setSentAt(new Carbon($sendingQueue->processedAt));
$newsletter->setSentAt(new Carbon($scheduledTask->processedAt));
$this->newslettersRepository->persist($newsletter);
$this->newslettersRepository->flush();
}

View File

@@ -404,8 +404,8 @@ class NewslettersRepository extends Repository {
/**
* @return NewsletterEntity[]
*/
public function findSendigNotificationHistoryWithPausedTask(NewsletterEntity $newsletter): array {
$result = $this->entityManager->createQueryBuilder()
public function findSendingNotificationHistoryWithoutPausedTask(NewsletterEntity $newsletter): array {
return $this->entityManager->createQueryBuilder()
->select('n')
->from(NewsletterEntity::class, 'n')
->join('n.queues', 'q')
@@ -413,13 +413,13 @@ class NewslettersRepository extends Repository {
->where('n.parent = :parent')
->andWhere('n.type = :type')
->andWhere('n.status = :status')
->andWhere('n.deletedAt IS NULL')
->andWhere('t.status != :taskStatus')
->setParameter('parent', $newsletter)
->setParameter('type', NewsletterEntity::TYPE_NOTIFICATION_HISTORY)
->setParameter('status', NewsletterEntity::STATUS_SENDING)
->setParameter('taskStatus', ScheduledTaskEntity::STATUS_PAUSED)
->getQuery()->execute();
return $result;
->getQuery()->getResult();
}
/**

View File

@@ -110,7 +110,7 @@ class PostNotificationScheduler {
}
public function createPostNotificationSendingTask(NewsletterEntity $newsletter): ?ScheduledTaskEntity {
$notificationHistory = $this->newslettersRepository->findSendigNotificationHistoryWithPausedTask($newsletter);
$notificationHistory = $this->newslettersRepository->findSendingNotificationHistoryWithoutPausedTask($newsletter);
if (count($notificationHistory) > 0) {
return null;
}

View File

@@ -2,7 +2,7 @@
/*
* Plugin Name: MailPoet
* Version: 3.99.0
* Version: 3.99.1
* Plugin URI: http://www.mailpoet.com
* Description: Create and send newsletters, post notifications and welcome emails from your WordPress.
* Author: MailPoet
@@ -17,7 +17,7 @@
*/
$mailpoetPlugin = [
'version' => '3.99.0',
'version' => '3.99.1',
'filename' => __FILE__,
'path' => dirname(__FILE__),
'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',

View File

@@ -3,7 +3,7 @@ Contributors: mailpoet
Tags: email, email marketing, post notification, woocommerce emails, email automation, newsletter, newsletter builder, newsletter subscribers
Requires at least: 5.6
Tested up to: 6.0
Stable tag: 3.99.0
Stable tag: 3.99.1
Requires PHP: 7.2
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.html
@@ -219,6 +219,9 @@ Check our [Knowledge Base](https://kb.mailpoet.com) or contact us through our [s
== Changelog ==
= 3.99.1 - 2022-09-29 =
* Fix issue with post notifications in MailPoet 3.99.
= 3.99.0 - 2022-09-27 =
* Added: any email address from a sender domain is automatically allowed for sending (MailPoet Sending Service only);
* Fixed: some post notifications may fail to send.

View File

@@ -485,11 +485,6 @@ parameters:
count: 2
path: ../../lib/Newsletter/NewslettersRepository.php
-
message: "#^Method MailPoet\\\\Newsletter\\\\NewslettersRepository\\:\\:findSendigNotificationHistoryWithPausedTask\\(\\) should return array\\<MailPoet\\\\Entities\\\\NewsletterEntity\\> but returns mixed\\.$#"
count: 1
path: ../../lib/Newsletter/NewslettersRepository.php
-
message: "#^Method MailPoet\\\\Newsletter\\\\Renderer\\\\Renderer\\:\\:postProcessTemplate\\(\\) should return string but returns mixed\\.$#"
count: 1

View File

@@ -485,11 +485,6 @@ parameters:
count: 2
path: ../../lib/Newsletter/NewslettersRepository.php
-
message: "#^Method MailPoet\\\\Newsletter\\\\NewslettersRepository\\:\\:findSendigNotificationHistoryWithPausedTask\\(\\) should return array\\<MailPoet\\\\Entities\\\\NewsletterEntity\\> but returns mixed\\.$#"
count: 1
path: ../../lib/Newsletter/NewslettersRepository.php
-
message: "#^Method MailPoet\\\\Newsletter\\\\Renderer\\\\Renderer\\:\\:postProcessTemplate\\(\\) should return string but returns mixed\\.$#"
count: 1

View File

@@ -484,11 +484,6 @@ parameters:
count: 2
path: ../../lib/Newsletter/NewslettersRepository.php
-
message: "#^Method MailPoet\\\\Newsletter\\\\NewslettersRepository\\:\\:findSendigNotificationHistoryWithPausedTask\\(\\) should return array\\<MailPoet\\\\Entities\\\\NewsletterEntity\\> but returns mixed\\.$#"
count: 1
path: ../../lib/Newsletter/NewslettersRepository.php
-
message: "#^Method MailPoet\\\\Newsletter\\\\Renderer\\\\Renderer\\:\\:postProcessTemplate\\(\\) should return string but returns mixed\\.$#"
count: 1

View File

@@ -31,6 +31,7 @@ use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
use MailPoet\Newsletter\Segment\NewsletterSegmentRepository;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
use MailPoet\Segments\SegmentsRepository;
use MailPoet\Segments\SubscribersFinder;
use MailPoet\Tasks\Sending as SendingTask;
@@ -72,6 +73,9 @@ class SchedulerTest extends \MailPoetTest {
/** @var NewsletterSegmentRepository */
private $newsletterSegmentRepository;
/** @var SendingQueuesRepository */
private $sendingQueuesRepository;
/** @var Security */
private $security;
@@ -87,6 +91,7 @@ class SchedulerTest extends \MailPoetTest {
$this->newsletterScheduler = $this->diContainer->get(NewsletterScheduler::class);
$this->newsletterOptionFactory = new NewsletterOptionFactory();
$this->newsletterSegmentRepository = $this->diContainer->get(NewsletterSegmentRepository::class);
$this->sendingQueuesRepository = $this->diContainer->get(SendingQueuesRepository::class);
$this->security = $this->diContainer->get(Security::class);
}
@@ -534,6 +539,7 @@ class SchedulerTest extends \MailPoetTest {
$this->newslettersRepository,
$this->segmentsRepository,
$this->newsletterSegmentRepository,
$this->sendingQueuesRepository,
WPFunctions::get(),
$this->security,
$this->newsletterScheduler,