Files
piratepoet/lib/Segments/SegmentListingRepository.php
Pavel Dohnal d93b168116 Refactor segments listings to doctrine
[MAILPOET-3168]
2021-01-08 10:37:50 +01:00

52 lines
1.6 KiB
PHP

<?php
namespace MailPoet\Segments;
use MailPoet\Entities\SegmentEntity;
use MailPoet\Listing\ListingRepository;
use MailPoet\Util\Helpers;
use MailPoetVendor\Doctrine\ORM\QueryBuilder;
class SegmentListingRepository extends ListingRepository {
const DEFAULT_SORT_BY = 'name';
protected function applySelectClause(QueryBuilder $queryBuilder) {
$queryBuilder->select("PARTIAL s.{id,name,type,description,createdAt,updatedAt,deletedAt}");
}
protected function applyFromClause(QueryBuilder $queryBuilder) {
$queryBuilder->from(SegmentEntity::class, 's');
}
protected function applyGroup(QueryBuilder $queryBuilder, string $group) {
if ($group === 'trash') {
$queryBuilder->andWhere('s.deletedAt IS NOT NULL');
} else {
$queryBuilder->andWhere('s.deletedAt IS NULL');
}
}
protected function applySearch(QueryBuilder $queryBuilder, string $search) {
$search = Helpers::escapeSearch($search);
$queryBuilder
->andWhere('s.name LIKE :search or s.description LIKE :search')
->setParameter('search', "%$search%");
}
protected function applyFilters(QueryBuilder $queryBuilder, array $filters) {
}
protected function applyParameters(QueryBuilder $queryBuilder, array $parameters) {
$queryBuilder
->andWhere('s.type IN (:type)')
->setParameter('type', [SegmentEntity::TYPE_DEFAULT, SegmentEntity::TYPE_WC_USERS, SegmentEntity::TYPE_WP_USERS]);
}
protected function applySorting(QueryBuilder $queryBuilder, string $sortBy, string $sortOrder) {
if (!$sortBy) {
$sortBy = self::DEFAULT_SORT_BY;
}
$queryBuilder->addOrderBy("s.$sortBy", $sortOrder);
}
}