Fix checking if post notification email contains any ALC posts

[MAILPOET-2029]
This commit is contained in:
Ján Mikláš
2019-05-14 16:17:01 +02:00
committed by M. Shull
parent c6c9442588
commit 9f21ff1285
3 changed files with 14 additions and 4 deletions

View File

@ -97,10 +97,9 @@ class Newsletter {
$newsletter
);
}
// check if this is a post notification and if it contains posts
$newsletter_contains_posts = strpos($rendered_newsletter['html'], 'data-post-id');
// check if this is a post notification and if it contains at least 1 ALC post
if ($newsletter->type === NewsletterModel::TYPE_NOTIFICATION_HISTORY &&
!$newsletter_contains_posts
$this->posts_task->getAlcPostsCount($rendered_newsletter, $newsletter) === 0
) {
// delete notification history record since it will never be sent
$newsletter->delete();

View File

@ -28,4 +28,10 @@ class Posts {
}
return true;
}
function getAlcPostsCount($rendered_newsletter, \MailPoet\Models\Newsletter $newsletter) {
$template_posts_count = substr_count($newsletter->body, 'data-post-id');
$newsletter_posts_count = substr_count($rendered_newsletter['html'], 'data-post-id');
return $newsletter_posts_count - $template_posts_count;
}
}

View File

@ -6,6 +6,7 @@ use AspectMock\Test as Mock;
use Codeception\Util\Fixtures;
use Helper\WordPressHooks as WPHooksHelper;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Posts as PostsTask;
use MailPoet\Mailer\MailerLog;
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterLink;
@ -192,7 +193,11 @@ class NewsletterTest extends \MailPoetTest {
function testItSavesNewsletterPosts() {
$this->newsletter->type = Newsletter::TYPE_NOTIFICATION_HISTORY;
$this->newsletter->parent_id = $this->newsletter->id;
$result = $this->newsletter_task->preProcessNewsletter($this->newsletter, $this->queue);
$posts_task = $this->make(PostsTask::class, [
'getAlcPostsCount' => 1
]);
$newsletter_task = new NewsletterTask(new WPFunctions, $posts_task);
$result = $newsletter_task->preProcessNewsletter($this->newsletter, $this->queue);
$newsletter_post = NewsletterPost::where('newsletter_id', $this->newsletter->id)
->findOne();
expect($result)->notEquals(false);