Use doctrine for latest post fetching
[MAILPOET-2899]
This commit is contained in:
@@ -265,6 +265,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
// Newsletter
|
// Newsletter
|
||||||
$container->autowire(\MailPoet\Newsletter\AutomatedLatestContent::class)->setPublic(true);
|
$container->autowire(\MailPoet\Newsletter\AutomatedLatestContent::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Newsletter\NewsletterSaveController::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\NewslettersRepository::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Newsletter\Listing\NewsletterListingRepository::class)->setPublic(true);
|
$container->autowire(\MailPoet\Newsletter\Listing\NewsletterListingRepository::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Newsletter\Options\NewsletterOptionsRepository::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 {
|
class NewsletterPost extends Model {
|
||||||
public static $_table = MP_NEWSLETTER_POSTS_TABLE; // phpcs:ignore PSR2.Classes.PropertyDeclaration
|
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;
|
namespace MailPoet\Newsletter\Renderer\Blocks;
|
||||||
|
|
||||||
use MailPoet\Entities\NewsletterEntity;
|
use MailPoet\Entities\NewsletterEntity;
|
||||||
|
use MailPoet\Entities\NewsletterPostEntity;
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
use MailPoet\Models\NewsletterPost;
|
|
||||||
use MailPoet\Newsletter\AutomatedLatestContent;
|
use MailPoet\Newsletter\AutomatedLatestContent;
|
||||||
|
use MailPoet\Newsletter\NewsletterPostsRepository;
|
||||||
use MailPoet\Newsletter\Renderer\Columns\ColumnsHelper;
|
use MailPoet\Newsletter\Renderer\Columns\ColumnsHelper;
|
||||||
use MailPoet\Newsletter\Renderer\StylesHelper;
|
use MailPoet\Newsletter\Renderer\StylesHelper;
|
||||||
|
|
||||||
@@ -37,7 +38,11 @@ class Renderer {
|
|||||||
/** @var Text */
|
/** @var Text */
|
||||||
private $text;
|
private $text;
|
||||||
|
|
||||||
|
/** @var NewsletterPostsRepository */
|
||||||
|
private $newsletterPostsRepository;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
|
NewsletterPostsRepository $newsletterPostsRepository,
|
||||||
AutomatedLatestContent $ALC,
|
AutomatedLatestContent $ALC,
|
||||||
Button $button,
|
Button $button,
|
||||||
Divider $divider,
|
Divider $divider,
|
||||||
@@ -58,6 +63,7 @@ class Renderer {
|
|||||||
$this->social = $social;
|
$this->social = $social;
|
||||||
$this->spacer = $spacer;
|
$this->spacer = $spacer;
|
||||||
$this->text = $text;
|
$this->text = $text;
|
||||||
|
$this->newsletterPostsRepository = $newsletterPostsRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function render(NewsletterEntity $newsletter, $data) {
|
public function render(NewsletterEntity $newsletter, $data) {
|
||||||
@@ -126,9 +132,9 @@ class Renderer {
|
|||||||
if ($parent instanceof NewsletterEntity) {
|
if ($parent instanceof NewsletterEntity) {
|
||||||
$newsletterId = $parent->getId();
|
$newsletterId = $parent->getId();
|
||||||
|
|
||||||
$lastPost = NewsletterPost::getNewestNewsletterPost($newsletterId);
|
$lastPost = $this->newsletterPostsRepository->findOneBy(['newsletter' => $newsletter], ['createdAt' => 'desc']);
|
||||||
if ($lastPost) {
|
if ($lastPost instanceof NewsletterPostEntity) {
|
||||||
$newerThanTimestamp = $lastPost->createdAt;
|
$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