diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index 67120bfede..85b41c6fe8 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -265,6 +265,7 @@ class ContainerConfigurator implements IContainerConfigurator { // Newsletter $container->autowire(\MailPoet\Newsletter\AutomatedLatestContent::class)->setPublic(true); $container->autowire(\MailPoet\Newsletter\NewsletterSaveController::class)->setPublic(true); + $container->autowire(\MailPoet\Newsletter\NewsletterPostsRepository::class)->setPublic(true); $container->autowire(\MailPoet\Newsletter\NewslettersRepository::class)->setPublic(true); $container->autowire(\MailPoet\Newsletter\Listing\NewsletterListingRepository::class)->setPublic(true); $container->autowire(\MailPoet\Newsletter\Options\NewsletterOptionsRepository::class)->setPublic(true); diff --git a/lib/Entities/NewsletterPostEntity.php b/lib/Entities/NewsletterPostEntity.php new file mode 100644 index 0000000000..125d2d41de --- /dev/null +++ b/lib/Entities/NewsletterPostEntity.php @@ -0,0 +1,52 @@ +newsletter = $newsletter; + $this->postId = $postId; + } + + /** + * @return NewsletterEntity|null + */ + public function getNewsletter() { + $this->safelyLoadToOneAssociation('newsletter'); + return $this->newsletter; + } + + /** + * @return int + */ + public function getPostId(): int { + return $this->postId; + } +} diff --git a/lib/Models/NewsletterPost.php b/lib/Models/NewsletterPost.php index 5ffdb29f70..7c98103cd0 100644 --- a/lib/Models/NewsletterPost.php +++ b/lib/Models/NewsletterPost.php @@ -10,9 +10,4 @@ namespace MailPoet\Models; class NewsletterPost extends Model { public static $_table = MP_NEWSLETTER_POSTS_TABLE; // phpcs:ignore PSR2.Classes.PropertyDeclaration - public static function getNewestNewsletterPost($newsletterId) { - return self::where('newsletter_id', $newsletterId) - ->orderByDesc('created_at') - ->findOne(); - } } diff --git a/lib/Newsletter/NewsletterPostsRepository.php b/lib/Newsletter/NewsletterPostsRepository.php new file mode 100644 index 0000000000..3c75d91323 --- /dev/null +++ b/lib/Newsletter/NewsletterPostsRepository.php @@ -0,0 +1,15 @@ + + */ +class NewsletterPostsRepository extends Repository { + protected function getEntityClassName() { + return NewsletterPostEntity::class; + } +} diff --git a/lib/Newsletter/Renderer/Blocks/Renderer.php b/lib/Newsletter/Renderer/Blocks/Renderer.php index a254b13122..28c23e0d22 100644 --- a/lib/Newsletter/Renderer/Blocks/Renderer.php +++ b/lib/Newsletter/Renderer/Blocks/Renderer.php @@ -3,9 +3,10 @@ namespace MailPoet\Newsletter\Renderer\Blocks; use MailPoet\Entities\NewsletterEntity; +use MailPoet\Entities\NewsletterPostEntity; use MailPoet\Models\Newsletter; -use MailPoet\Models\NewsletterPost; use MailPoet\Newsletter\AutomatedLatestContent; +use MailPoet\Newsletter\NewsletterPostsRepository; use MailPoet\Newsletter\Renderer\Columns\ColumnsHelper; use MailPoet\Newsletter\Renderer\StylesHelper; @@ -37,7 +38,11 @@ class Renderer { /** @var Text */ private $text; + /** @var NewsletterPostsRepository */ + private $newsletterPostsRepository; + public function __construct( + NewsletterPostsRepository $newsletterPostsRepository, AutomatedLatestContent $ALC, Button $button, Divider $divider, @@ -58,6 +63,7 @@ class Renderer { $this->social = $social; $this->spacer = $spacer; $this->text = $text; + $this->newsletterPostsRepository = $newsletterPostsRepository; } public function render(NewsletterEntity $newsletter, $data) { @@ -126,9 +132,9 @@ class Renderer { if ($parent instanceof NewsletterEntity) { $newsletterId = $parent->getId(); - $lastPost = NewsletterPost::getNewestNewsletterPost($newsletterId); - if ($lastPost) { - $newerThanTimestamp = $lastPost->createdAt; + $lastPost = $this->newsletterPostsRepository->findOneBy(['newsletter' => $newsletter], ['createdAt' => 'desc']); + if ($lastPost instanceof NewsletterPostEntity) { + $newerThanTimestamp = $lastPost->getCreatedAt(); } } diff --git a/tests/integration/Models/NewsletterPostTest.php b/tests/integration/Models/NewsletterPostTest.php deleted file mode 100644 index d537ac2f8a..0000000000 --- a/tests/integration/Models/NewsletterPostTest.php +++ /dev/null @@ -1,26 +0,0 @@ -newsletterId = 1; - $newsletterPost->postId = $index; - $newsletterPost->save(); - $newsletterPost->createdAt = Carbon::now() - ->addMinutes($index); - $newsletterPost->save(); - } - $latestNewsletterPost = NewsletterPost::getNewestNewsletterPost(1); - expect($latestNewsletterPost->postId)->equals(5); - } - - public function _after() { - NewsletterPost::deleteMany(); - } -}