Create SubscriberListingRepository

[MAILPOET-2657]
This commit is contained in:
Pavel Dohnal
2020-08-03 11:18:32 +02:00
committed by Veljko V
parent 7d94e2fbbd
commit 0f5bbd744e
2 changed files with 63 additions and 0 deletions

View File

@@ -238,6 +238,7 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\Subscribers\InactiveSubscribersController::class);
$container->autowire(\MailPoet\Subscribers\LinkTokens::class)->setPublic(true);
$container->autowire(\MailPoet\Subscribers\SubscribersRepository::class);
$container->autowire(\MailPoet\Subscribers\SubscriberListingRepository::class);
$container->autowire(\MailPoet\Subscribers\SubscriberSegmentRepository::class);
$container->autowire(\MailPoet\Subscribers\SubscriberCustomFieldRepository::class);
// Segments

View File

@@ -0,0 +1,62 @@
<?php declare(strict_types = 1);
namespace MailPoet\Subscribers;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Listing\ListingRepository;
use MailPoetVendor\Doctrine\ORM\QueryBuilder;
class SubscriberListingRepository extends ListingRepository {
private static $supportedStatuses = [
SubscriberEntity::STATUS_SUBSCRIBED,
SubscriberEntity::STATUS_UNSUBSCRIBED,
SubscriberEntity::STATUS_INACTIVE,
SubscriberEntity::STATUS_BOUNCED,
SubscriberEntity::STATUS_UNCONFIRMED,
];
protected function applySelectClause(QueryBuilder $queryBuilder) {
$queryBuilder->select("PARTIAL s.{id,email,firstName,lastName,status,createdAt}");
}
protected function applyFromClause(QueryBuilder $queryBuilder) {
$queryBuilder->from(SubscriberEntity::class, 's');
}
protected function applyGroup(QueryBuilder $queryBuilder, string $group) {
// include/exclude deleted
if ($group === 'trash') {
$queryBuilder->andWhere('s.deletedAt IS NOT NULL');
} else {
$queryBuilder->andWhere('s.deletedAt IS NULL');
}
if (!in_array($group, self::$supportedStatuses)) {
return;
}
$queryBuilder
->andWhere('s.status = :status')
->setParameter('status', $group);
}
protected function applySearch(QueryBuilder $queryBuilder, string $search) {
$search = str_replace(['\\', '%', '_'], ['\\\\', '\\%', '\\_'], $search); // escape for 'LIKE'
$queryBuilder
->andWhere('s.subject LIKE :search')
->setParameter('search', "%$search%");
}
protected function applyFilters(QueryBuilder $queryBuilder, array $filters) {
// this is done in a different level
}
protected function applyParameters(QueryBuilder $queryBuilder, array $parameters) {
// nothing to do here
}
protected function applySorting(QueryBuilder $queryBuilder, string $sortBy, string $sortOrder) {
$queryBuilder->addOrderBy("s.$sortBy", $sortOrder);
}
}