Use NewslettersListingRepository for newsletter filters
[MAILPOET-2645]
This commit is contained in:
committed by
Jack Kitterhing
parent
51882b43cf
commit
b4bcc5179c
@ -524,7 +524,7 @@ class Newsletters extends APIEndpoint {
|
|||||||
$definition = $this->listingHandler->getListingDefinition($data);
|
$definition = $this->listingHandler->getListingDefinition($data);
|
||||||
$items = $this->newsletterListingRepository->getData($definition);
|
$items = $this->newsletterListingRepository->getData($definition);
|
||||||
$count = $this->newsletterListingRepository->getCount($definition);
|
$count = $this->newsletterListingRepository->getCount($definition);
|
||||||
$filters = Newsletter::filters($data);
|
$filters = $this->newsletterListingRepository->getFilters($definition);
|
||||||
$groups = Newsletter::groups($data);
|
$groups = Newsletter::groups($data);
|
||||||
|
|
||||||
$data = [];
|
$data = [];
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
namespace MailPoet\Newsletter\Listing;
|
namespace MailPoet\Newsletter\Listing;
|
||||||
|
|
||||||
use MailPoet\Entities\NewsletterEntity;
|
use MailPoet\Entities\NewsletterEntity;
|
||||||
|
use MailPoet\Listing\ListingDefinition;
|
||||||
use MailPoet\Listing\ListingRepository;
|
use MailPoet\Listing\ListingRepository;
|
||||||
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
use MailPoetVendor\Doctrine\ORM\QueryBuilder;
|
use MailPoetVendor\Doctrine\ORM\QueryBuilder;
|
||||||
|
|
||||||
class NewsletterListingRepository extends ListingRepository {
|
class NewsletterListingRepository extends ListingRepository {
|
||||||
@ -23,6 +25,52 @@ class NewsletterListingRepository extends ListingRepository {
|
|||||||
NewsletterEntity::TYPE_NOTIFICATION_HISTORY,
|
NewsletterEntity::TYPE_NOTIFICATION_HISTORY,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
public function getFilters(ListingDefinition $definition): array {
|
||||||
|
$group = $definition->getGroup();
|
||||||
|
$typeParam = $definition->getParameters()['type'] ?? null;
|
||||||
|
$groupParam = $definition->getParameters()['group'] ?? null;
|
||||||
|
|
||||||
|
// newsletter types without filters
|
||||||
|
if (in_array($typeParam, [NewsletterEntity::TYPE_NOTIFICATION_HISTORY])) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$queryBuilder = clone $this->queryBuilder;
|
||||||
|
$this->applyFromClause($queryBuilder);
|
||||||
|
|
||||||
|
if ($group) {
|
||||||
|
$this->applyGroup($queryBuilder, $group);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($typeParam) {
|
||||||
|
$this->applyType($queryBuilder, $typeParam, $groupParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
$queryBuilder
|
||||||
|
->select('s.id, s.name, COUNT(n) AS newsletterCount')
|
||||||
|
->join('n.newsletterSegments', 'ns')
|
||||||
|
->join('ns.segment', 's')
|
||||||
|
->groupBy('s.id')
|
||||||
|
->orderBy('s.name')
|
||||||
|
->having('COUNT(n) > 0');
|
||||||
|
|
||||||
|
// format segment list
|
||||||
|
$segmentList = [
|
||||||
|
[
|
||||||
|
'label' => WPFunctions::get()->__('All Lists', 'mailpoet'),
|
||||||
|
'value' => '',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($queryBuilder->getQuery()->getResult() as $item) {
|
||||||
|
$segmentList[] = [
|
||||||
|
'label' => sprintf('%s (%d)', $item['name'], $item['newsletterCount']),
|
||||||
|
'value' => $item['id'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return ['segments' => $segmentList];
|
||||||
|
}
|
||||||
|
|
||||||
protected function applySelectClause(QueryBuilder $queryBuilder) {
|
protected function applySelectClause(QueryBuilder $queryBuilder) {
|
||||||
$queryBuilder->select("PARTIAL n.{id,subject,hash,type,status,sentAt,updatedAt,deletedAt}");
|
$queryBuilder->select("PARTIAL n.{id,subject,hash,type,status,sentAt,updatedAt,deletedAt}");
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user