From 1a58842c26d136bcc627cb68ddcf6623a2916c78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lys=C3=BD?= Date: Tue, 12 Jul 2022 10:16:45 +0200 Subject: [PATCH] Remove old model from Segments admin page [MAILPOET-4339] --- mailpoet/lib/AdminPages/Pages/Segments.php | 18 +++++++++++++----- .../lib/Newsletter/NewslettersRepository.php | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/mailpoet/lib/AdminPages/Pages/Segments.php b/mailpoet/lib/AdminPages/Pages/Segments.php index 4662b510c2..11ef24dd94 100644 --- a/mailpoet/lib/AdminPages/Pages/Segments.php +++ b/mailpoet/lib/AdminPages/Pages/Segments.php @@ -4,6 +4,7 @@ namespace MailPoet\AdminPages\Pages; use MailPoet\AdminPages\PageRenderer; use MailPoet\API\JSON\ResponseBuilders\CustomFieldsResponseBuilder; +use MailPoet\API\JSON\ResponseBuilders\NewslettersResponseBuilder; use MailPoet\Cache\TransientCache; use MailPoet\Config\Installer; use MailPoet\Config\ServicesChecker; @@ -11,7 +12,7 @@ use MailPoet\CustomFields\CustomFieldsRepository; use MailPoet\Entities\DynamicSegmentFilterData; use MailPoet\Entities\SegmentEntity; use MailPoet\Listing\PageLimit; -use MailPoet\Models\Newsletter; +use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Segments\SegmentDependencyValidator; use MailPoet\Segments\SegmentsRepository; use MailPoet\Services\Bridge; @@ -60,6 +61,12 @@ class Segments { /** @var SegmentsRepository */ private $segmentsRepository; + /** @var NewslettersRepository */ + private $newslettersRepository; + + /** @var NewslettersResponseBuilder */ + private $newslettersResponseBuilder; + /** @var TrackingConfig */ private $trackingConfig; @@ -75,6 +82,8 @@ class Segments { CustomFieldsResponseBuilder $customFieldsResponseBuilder, SegmentDependencyValidator $segmentDependencyValidator, SegmentsRepository $segmentsRepository, + NewslettersRepository $newslettersRepository, + NewslettersResponseBuilder $newslettersResponseBuilder, TrackingConfig $trackingConfig, TransientCache $transientCache ) { @@ -90,7 +99,9 @@ class Segments { $this->customFieldsResponseBuilder = $customFieldsResponseBuilder; $this->transientCache = $transientCache; $this->segmentsRepository = $segmentsRepository; + $this->newslettersRepository = $newslettersRepository; $this->trackingConfig = $trackingConfig; + $this->newslettersResponseBuilder = $newslettersResponseBuilder; } public function render() { @@ -131,10 +142,7 @@ class Segments { ]; }, array_keys($wpRoles), $wpRoles); - $data['newsletters_list'] = Newsletter::select(['id', 'subject', 'sent_at']) - ->whereNull('deleted_at') - ->where('type', Newsletter::TYPE_STANDARD) - ->orderByExpr('ISNULL(sent_at) DESC, sent_at DESC')->findArray(); + $data['newsletters_list'] = $this->newslettersResponseBuilder->buildForListing($this->newslettersRepository->getStandardNewsletterList()); $data['static_segments_list'] = []; $criteria = new Criteria(); diff --git a/mailpoet/lib/Newsletter/NewslettersRepository.php b/mailpoet/lib/Newsletter/NewslettersRepository.php index e87c807e1d..c2ab305f71 100644 --- a/mailpoet/lib/Newsletter/NewslettersRepository.php +++ b/mailpoet/lib/Newsletter/NewslettersRepository.php @@ -422,6 +422,24 @@ class NewslettersRepository extends Repository { return $result; } + /** + * Returns standard newsletters ordered by sentAt + * @return NewsletterEntity[] + */ + public function getStandardNewsletterList(): array { + return $this->entityManager->createQueryBuilder() + ->select('n') + ->addSelect('CASE WHEN n.sentAt IS NULL THEN 1 ELSE 0 END as HIDDEN sent_at_is_null') + ->from(NewsletterEntity::class, 'n') + ->where('n.type = :typeStandard') + ->andWhere('n.deletedAt IS NULL') + ->orderBy('sent_at_is_null', 'DESC') + ->addOrderBy('n.sentAt', 'DESC') + ->setParameter('typeStandard', NewsletterEntity::TYPE_STANDARD) + ->getQuery() + ->getResult(); + } + public function prefetchOptions(array $newsletters) { $this->entityManager->createQueryBuilder() ->select('PARTIAL n.{id}, o, opf')