Use doctrine for latest post fetching
[MAILPOET-2899]
This commit is contained in:
@ -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);
|
||||
|
52
lib/Entities/NewsletterPostEntity.php
Normal file
52
lib/Entities/NewsletterPostEntity.php
Normal file
@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
namespace MailPoet\Entities;
|
||||
|
||||
use MailPoet\Doctrine\EntityTraits\AutoincrementedIdTrait;
|
||||
use MailPoet\Doctrine\EntityTraits\CreatedAtTrait;
|
||||
use MailPoet\Doctrine\EntityTraits\SafeToOneAssociationLoadTrait;
|
||||
use MailPoet\Doctrine\EntityTraits\UpdatedAtTrait;
|
||||
use MailPoetVendor\Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
/**
|
||||
* @ORM\Entity()
|
||||
* @ORM\Table(name="newsletter_posts")
|
||||
*/
|
||||
class NewsletterPostEntity {
|
||||
use AutoincrementedIdTrait;
|
||||
use CreatedAtTrait;
|
||||
use UpdatedAtTrait;
|
||||
use SafeToOneAssociationLoadTrait;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="MailPoet\Entities\NewsletterEntity", inversedBy="newsletterSegments")
|
||||
* @var NewsletterEntity
|
||||
*/
|
||||
private $newsletter;
|
||||
|
||||
/**
|
||||
* @ORM\Column(type="int")
|
||||
* @var int
|
||||
*/
|
||||
private $postId;
|
||||
|
||||
public function __construct(NewsletterEntity $newsletter, int $postId) {
|
||||
$this->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;
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
15
lib/Newsletter/NewsletterPostsRepository.php
Normal file
15
lib/Newsletter/NewsletterPostsRepository.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace MailPoet\Newsletter;
|
||||
|
||||
use MailPoet\Doctrine\Repository;
|
||||
use MailPoet\Entities\NewsletterPostEntity;
|
||||
|
||||
/**
|
||||
* @extends Repository<NewsletterPostEntity>
|
||||
*/
|
||||
class NewsletterPostsRepository extends Repository {
|
||||
protected function getEntityClassName() {
|
||||
return NewsletterPostEntity::class;
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,26 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace MailPoet\Test\Models;
|
||||
|
||||
use MailPoet\Models\NewsletterPost;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
|
||||
class NewsletterPostTest extends \MailPoetTest {
|
||||
public function testItCanGetLatestNewsletterPost() {
|
||||
foreach (range(1, 5) as $index) {
|
||||
$newsletterPost = NewsletterPost::create();
|
||||
$newsletterPost->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();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user