Use Doctrine in the posts task

[MAILPOET-3027]
This commit is contained in:
Pavel Dohnal
2021-03-10 11:16:55 +01:00
committed by Veljko V
parent 309ab2b3c0
commit ee41046b8e
2 changed files with 25 additions and 12 deletions

View File

@@ -151,7 +151,9 @@ class Newsletter {
return false; return false;
} }
// extract and save newsletter posts // extract and save newsletter posts
$this->postsTask->extractAndSave($renderedNewsletter, $newsletter); $newsletterEntity = $this->newslettersRepository->findOneById($newsletter->id);
if (!$newsletterEntity) return false;
$this->postsTask->extractAndSave($renderedNewsletter, $newsletterEntity);
// update queue with the rendered and pre-processed newsletter // update queue with the rendered and pre-processed newsletter
$sendingTask->newsletterRenderedSubject = ShortcodesTask::process( $sendingTask->newsletterRenderedSubject = ShortcodesTask::process(
$newsletter->subject, $newsletter->subject,

View File

@@ -2,25 +2,31 @@
namespace MailPoet\Cron\Workers\SendingQueue\Tasks; namespace MailPoet\Cron\Workers\SendingQueue\Tasks;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\NewsletterPostEntity;
use MailPoet\Logging\LoggerFactory; use MailPoet\Logging\LoggerFactory;
use MailPoet\Models\Newsletter as NewsletterModel; use MailPoet\Newsletter\NewsletterPostsRepository;
use MailPoet\Models\NewsletterPost;
class Posts { class Posts {
/** @var LoggerFactory */ /** @var LoggerFactory */
private $loggerFactory; private $loggerFactory;
/** @var NewsletterPostsRepository */
private $newsletterPostRepository;
public function __construct() { public function __construct() {
$this->loggerFactory = LoggerFactory::getInstance(); $this->loggerFactory = LoggerFactory::getInstance();
$this->newsletterPostRepository = ContainerWrapper::getInstance()->get(NewsletterPostsRepository::class);
} }
public function extractAndSave($renderedNewsletter, $newsletter) { public function extractAndSave($renderedNewsletter, NewsletterEntity $newsletter): bool {
if ($newsletter->type !== NewsletterModel::TYPE_NOTIFICATION_HISTORY) { if ($newsletter->getType() !== NewsletterEntity::TYPE_NOTIFICATION_HISTORY) {
return false; return false;
} }
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_POST_NOTIFICATIONS)->addInfo( $this->loggerFactory->getLogger(LoggerFactory::TOPIC_POST_NOTIFICATIONS)->addInfo(
'extract and save posts - before', 'extract and save posts - before',
['newsletter_id' => $newsletter->id] ['newsletter_id' => $newsletter->getId()]
); );
preg_match_all( preg_match_all(
'/data-post-id="(\d+)"/ism', '/data-post-id="(\d+)"/ism',
@@ -30,16 +36,21 @@ class Posts {
if (!count($matchedPostsIds)) { if (!count($matchedPostsIds)) {
return false; return false;
} }
$newsletterId = $newsletter->parentId; // parent post notification $parent = $newsletter->getParent(); // parent post notification
if (!$parent instanceof NewsletterEntity) {
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_POST_NOTIFICATIONS)->addInfo(
'parent post has not been found',
['newsletter_id' => $newsletter->getId()]
);
return false;
}
foreach ($matchedPostsIds as $postId) { foreach ($matchedPostsIds as $postId) {
$newsletterPost = NewsletterPost::create(); $newsletterPost = new NewsletterPostEntity($parent, $postId);
$newsletterPost->newsletterId = $newsletterId; $this->newsletterPostRepository->persist($newsletterPost);
$newsletterPost->postId = $postId;
$newsletterPost->save();
} }
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_POST_NOTIFICATIONS)->addInfo( $this->loggerFactory->getLogger(LoggerFactory::TOPIC_POST_NOTIFICATIONS)->addInfo(
'extract and save posts - after', 'extract and save posts - after',
['newsletter_id' => $newsletter->id, 'matched_posts_ids' => $matchedPostsIds] ['newsletter_id' => $newsletter->getId(), 'matched_posts_ids' => $matchedPostsIds]
); );
return true; return true;
} }