Use NewslettersListingRepository for newsletter groups
[MAILPOET-2645]
This commit is contained in:
committed by
Jack Kitterhing
parent
b4bcc5179c
commit
8f8439d47f
@ -525,7 +525,7 @@ class Newsletters extends APIEndpoint {
|
|||||||
$items = $this->newsletterListingRepository->getData($definition);
|
$items = $this->newsletterListingRepository->getData($definition);
|
||||||
$count = $this->newsletterListingRepository->getCount($definition);
|
$count = $this->newsletterListingRepository->getCount($definition);
|
||||||
$filters = $this->newsletterListingRepository->getFilters($definition);
|
$filters = $this->newsletterListingRepository->getFilters($definition);
|
||||||
$groups = Newsletter::groups($data);
|
$groups = $this->newsletterListingRepository->getGroups($definition);
|
||||||
|
|
||||||
$data = [];
|
$data = [];
|
||||||
foreach ($items as $newsletter) {
|
foreach ($items as $newsletter) {
|
||||||
|
@ -71,6 +71,110 @@ class NewsletterListingRepository extends ListingRepository {
|
|||||||
return ['segments' => $segmentList];
|
return ['segments' => $segmentList];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getGroups(ListingDefinition $definition): array {
|
||||||
|
$queryBuilder = clone $this->queryBuilder;
|
||||||
|
$this->applyFromClause($queryBuilder);
|
||||||
|
$this->applyParameters($queryBuilder, $definition->getParameters());
|
||||||
|
|
||||||
|
// total count
|
||||||
|
$countQueryBuilder = clone $queryBuilder;
|
||||||
|
$countQueryBuilder->select('COUNT(n) AS newsletterCount');
|
||||||
|
$countQueryBuilder->andWhere('n.deletedAt IS NULL');
|
||||||
|
$totalCount = (int)$countQueryBuilder->getQuery()->getSingleScalarResult();
|
||||||
|
|
||||||
|
// trashed count
|
||||||
|
$trashedCountQueryBuilder = clone $queryBuilder;
|
||||||
|
$trashedCountQueryBuilder->select('COUNT(n) AS newsletterCount');
|
||||||
|
$trashedCountQueryBuilder->andWhere('n.deletedAt IS NOT NULL');
|
||||||
|
$trashedCount = (int)$trashedCountQueryBuilder->getQuery()->getSingleScalarResult();
|
||||||
|
|
||||||
|
// count-by-status query
|
||||||
|
$queryBuilder->select('n.status, COUNT(n) AS newsletterCount');
|
||||||
|
$queryBuilder->andWhere('n.deletedAt IS NULL');
|
||||||
|
$queryBuilder->groupBy('n.status');
|
||||||
|
|
||||||
|
$map = [];
|
||||||
|
foreach ($queryBuilder->getQuery()->getResult() as $item) {
|
||||||
|
$map[$item['status']] = (int)$item['newsletterCount'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$groups = [
|
||||||
|
[
|
||||||
|
'name' => 'all',
|
||||||
|
'label' => WPFunctions::get()->__('All', 'mailpoet'),
|
||||||
|
'count' => $totalCount,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$type = $definition->getParameters()['type'] ?? null;
|
||||||
|
switch ($type) {
|
||||||
|
case NewsletterEntity::TYPE_STANDARD:
|
||||||
|
$groups = array_merge($groups, [
|
||||||
|
[
|
||||||
|
'name' => NewsletterEntity::STATUS_DRAFT,
|
||||||
|
'label' => WPFunctions::get()->__('Draft', 'mailpoet'),
|
||||||
|
'count' => $map[NewsletterEntity::STATUS_DRAFT] ?? 0,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => NewsletterEntity::STATUS_SCHEDULED,
|
||||||
|
'label' => WPFunctions::get()->__('Scheduled', 'mailpoet'),
|
||||||
|
'count' => $map[NewsletterEntity::STATUS_SCHEDULED] ?? 0,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => NewsletterEntity::STATUS_SENDING,
|
||||||
|
'label' => WPFunctions::get()->__('Sending', 'mailpoet'),
|
||||||
|
'count' => $map[NewsletterEntity::STATUS_SENDING] ?? 0,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => NewsletterEntity::STATUS_SENT,
|
||||||
|
'label' => WPFunctions::get()->__('Sent', 'mailpoet'),
|
||||||
|
'count' => $map[NewsletterEntity::STATUS_SENT] ?? 0,
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NewsletterEntity::TYPE_NOTIFICATION_HISTORY:
|
||||||
|
$groups = array_merge($groups, [
|
||||||
|
[
|
||||||
|
'name' => NewsletterEntity::STATUS_SENDING,
|
||||||
|
'label' => WPFunctions::get()->__('Sending', 'mailpoet'),
|
||||||
|
'count' => $map[NewsletterEntity::STATUS_SENDING] ?? 0,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => NewsletterEntity::STATUS_SENT,
|
||||||
|
'label' => WPFunctions::get()->__('Sent', 'mailpoet'),
|
||||||
|
'count' => $map[NewsletterEntity::STATUS_SENT] ?? 0,
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NewsletterEntity::TYPE_WELCOME:
|
||||||
|
case NewsletterEntity::TYPE_NOTIFICATION:
|
||||||
|
case NewsletterEntity::TYPE_AUTOMATIC:
|
||||||
|
$groups = array_merge($groups, [
|
||||||
|
[
|
||||||
|
'name' => NewsletterEntity::STATUS_ACTIVE,
|
||||||
|
'label' => WPFunctions::get()->__('Active', 'mailpoet'),
|
||||||
|
'count' => $map[NewsletterEntity::STATUS_ACTIVE] ?? 0,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => NewsletterEntity::STATUS_DRAFT,
|
||||||
|
'label' => WPFunctions::get()->__('Not active', 'mailpoet'),
|
||||||
|
'count' => $map[NewsletterEntity::STATUS_DRAFT] ?? 0,
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$groups[] = [
|
||||||
|
'name' => 'trash',
|
||||||
|
'label' => WPFunctions::get()->__('Trash', 'mailpoet'),
|
||||||
|
'count' => $trashedCount,
|
||||||
|
];
|
||||||
|
|
||||||
|
return $groups;
|
||||||
|
}
|
||||||
|
|
||||||
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