Move groups definitions
[MAILPOET-3168]
This commit is contained in:
@ -12,7 +12,6 @@ use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Listing;
|
||||
use MailPoet\Models\Segment;
|
||||
use MailPoet\Newsletter\Segment\NewsletterSegmentRepository;
|
||||
use MailPoet\Segments\SegmentListingRepository;
|
||||
use MailPoet\Segments\SegmentSaveController;
|
||||
use MailPoet\Segments\SegmentsRepository;
|
||||
@ -44,9 +43,6 @@ class Segments extends APIEndpoint {
|
||||
/** @var SubscribersRepository */
|
||||
private $subscribersRepository;
|
||||
|
||||
/** @var NewsletterSegmentRepository */
|
||||
private $newsletterSegmentRepository;
|
||||
|
||||
/** @var WooCommerce */
|
||||
private $wooCommerceSync;
|
||||
|
||||
@ -98,15 +94,6 @@ class Segments extends APIEndpoint {
|
||||
$groups = $this->segmentListingRepository->getGroups($definition);
|
||||
$segments = $this->segmentsResponseBuilder->buildForListing($items);
|
||||
|
||||
// $data = [];
|
||||
// foreach ($listingData['items'] as $segment) {
|
||||
//
|
||||
// $segmentData = $segment
|
||||
// ->withSubscribersCount()
|
||||
// ->asArray();
|
||||
//$data[] = $segmentData;
|
||||
// }
|
||||
|
||||
return $this->successResponse($segments, [
|
||||
'count' => $count,
|
||||
'filters' => $filters,
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
namespace MailPoet\Models;
|
||||
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\WooCommerce\Helper as WCHelper;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
@ -162,6 +161,9 @@ class Segment extends Model {
|
||||
return $wcSegment;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use the non static implementation in \MailPoet\Segments\WooCommerce::shouldShowWooCommerceSegment instead
|
||||
*/
|
||||
public static function shouldShowWooCommerceSegment() {
|
||||
$woocommerceHelper = new WCHelper();
|
||||
$isWoocommerceActive = $woocommerceHelper->isWooCommerceActive();
|
||||
@ -189,29 +191,6 @@ class Segment extends Model {
|
||||
return $types;
|
||||
}
|
||||
|
||||
// TODO REMOVE
|
||||
public static function groups() {
|
||||
$allQuery = Segment::getPublished();
|
||||
$allQuery->whereNotEqual('type', DynamicSegment::TYPE_DYNAMIC);
|
||||
if (!Segment::shouldShowWooCommerceSegment()) {
|
||||
$allQuery->whereNotEqual('type', self::TYPE_WC_USERS);
|
||||
}
|
||||
return [
|
||||
[
|
||||
'name' => 'all',
|
||||
'label' => WPFunctions::get()->__('All', 'mailpoet'),
|
||||
'count' => $allQuery->count(),
|
||||
],
|
||||
[
|
||||
'name' => 'trash',
|
||||
'label' => WPFunctions::get()->__('Trash', 'mailpoet'),
|
||||
'count' => Segment::getTrashed()
|
||||
->whereNotEqual('type', DynamicSegment::TYPE_DYNAMIC)
|
||||
->count(),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function groupBy($orm, $group = null) {
|
||||
if ($group === 'trash') {
|
||||
$orm->whereNotNull('deleted_at');
|
||||
|
@ -3,13 +3,26 @@
|
||||
namespace MailPoet\Segments;
|
||||
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Listing\ListingDefinition;
|
||||
use MailPoet\Listing\ListingRepository;
|
||||
use MailPoet\Util\Helpers;
|
||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||
use MailPoetVendor\Doctrine\ORM\QueryBuilder;
|
||||
|
||||
class SegmentListingRepository extends ListingRepository {
|
||||
const DEFAULT_SORT_BY = 'name';
|
||||
|
||||
/** @var WooCommerce */
|
||||
private $wooCommerce;
|
||||
|
||||
public function __construct(
|
||||
EntityManager $entityManager,
|
||||
WooCommerce $wooCommerce
|
||||
) {
|
||||
parent::__construct($entityManager);
|
||||
$this->wooCommerce = $wooCommerce;
|
||||
}
|
||||
|
||||
protected function applySelectClause(QueryBuilder $queryBuilder) {
|
||||
$queryBuilder->select("PARTIAL s.{id,name,type,description,createdAt,updatedAt,deletedAt}");
|
||||
}
|
||||
@ -37,9 +50,13 @@ class SegmentListingRepository extends ListingRepository {
|
||||
}
|
||||
|
||||
protected function applyParameters(QueryBuilder $queryBuilder, array $parameters) {
|
||||
$types = [SegmentEntity::TYPE_DEFAULT, SegmentEntity::TYPE_WP_USERS];
|
||||
if ($this->wooCommerce->shouldShowWooCommerceSegment()) {
|
||||
$types[] = SegmentEntity::TYPE_WC_USERS;
|
||||
}
|
||||
$queryBuilder
|
||||
->andWhere('s.type IN (:type)')
|
||||
->setParameter('type', [SegmentEntity::TYPE_DEFAULT, SegmentEntity::TYPE_WC_USERS, SegmentEntity::TYPE_WP_USERS]);
|
||||
->setParameter('type', $types);
|
||||
}
|
||||
|
||||
protected function applySorting(QueryBuilder $queryBuilder, string $sortBy, string $sortOrder) {
|
||||
@ -48,4 +65,40 @@ class SegmentListingRepository extends ListingRepository {
|
||||
}
|
||||
$queryBuilder->addOrderBy("s.$sortBy", $sortOrder);
|
||||
}
|
||||
|
||||
public function getGroups(ListingDefinition $definition): array {
|
||||
$queryBuilder = clone $this->queryBuilder;
|
||||
$this->applyFromClause($queryBuilder);
|
||||
$this->applyParameters($queryBuilder, $definition->getParameters());
|
||||
|
||||
$queryBuilder->select('count(s.id)');
|
||||
|
||||
if (!$this->wooCommerce->shouldShowWooCommerceSegment()) {
|
||||
$queryBuilder
|
||||
->andWhere('s.type != :wcUsers')
|
||||
->setParameter('wcUsers', SegmentEntity::TYPE_WC_USERS);
|
||||
}
|
||||
|
||||
$allQueryBuilder = clone $queryBuilder;
|
||||
$trashedQueryBuilder = clone $queryBuilder;
|
||||
|
||||
$allQueryBuilder->andWhere('s.deletedAt IS NULL');
|
||||
$allCount = $allQueryBuilder->getQuery()->getSingleScalarResult();
|
||||
|
||||
$trashedQueryBuilder->andWhere('s.deletedAt IS NOT NULL');
|
||||
$trashedCount = $trashedQueryBuilder->getQuery()->getSingleScalarResult();
|
||||
|
||||
return [
|
||||
[
|
||||
'name' => 'all',
|
||||
'label' => __('All', 'mailpoet'),
|
||||
'count' => $allCount,
|
||||
],
|
||||
[
|
||||
'name' => 'trash',
|
||||
'label' => __('Trash', 'mailpoet'),
|
||||
'count' => $trashedCount,
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -9,6 +9,8 @@ use MailPoet\Models\Subscriber;
|
||||
use MailPoet\Models\SubscriberSegment;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Subscribers\Source;
|
||||
use MailPoet\Subscribers\SubscribersRepository;
|
||||
use MailPoet\WooCommerce\Helper as WCHelper;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
use MailPoetVendor\Idiorm\ORM;
|
||||
|
||||
@ -25,14 +27,34 @@ class WooCommerce {
|
||||
private $mailpoetEmailCollation;
|
||||
private $wpPostmetaValueCollation;
|
||||
|
||||
/** @var SubscribersRepository */
|
||||
private $subscribersRepository;
|
||||
|
||||
/** @var WCHelper */
|
||||
private $woocommerceHelper;
|
||||
|
||||
public function __construct(
|
||||
SettingsController $settings,
|
||||
WPFunctions $wp,
|
||||
WCHelper $woocommerceHelper,
|
||||
SubscribersRepository $subscribersRepository,
|
||||
WP $wpSegment
|
||||
) {
|
||||
$this->settings = $settings;
|
||||
$this->wp = $wp;
|
||||
$this->wpSegment = $wpSegment;
|
||||
$this->subscribersRepository = $subscribersRepository;
|
||||
$this->woocommerceHelper = $woocommerceHelper;
|
||||
}
|
||||
|
||||
public function shouldShowWooCommerceSegment() {
|
||||
$isWoocommerceActive = $this->woocommerceHelper->isWooCommerceActive();
|
||||
$woocommerceUserExists = $this->subscribersRepository->woocommerceUserExists();
|
||||
|
||||
if (!$isWoocommerceActive && !$woocommerceUserExists) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function synchronizeRegisteredCustomer($wpUserId, $currentFilter = null) {
|
||||
|
@ -213,6 +213,23 @@ class SubscribersRepository extends Repository {
|
||||
return count($subscribers);
|
||||
}
|
||||
|
||||
public function woocommerceUserExists(): bool {
|
||||
$subscribers = $this->entityManager
|
||||
->createQueryBuilder()
|
||||
->select('s')
|
||||
->from(SubscriberEntity::class, 's')
|
||||
->join(SubscriberSegmentEntity::class, 'ss')
|
||||
->join(SegmentEntity::class, 'segment')
|
||||
->where('segment.type = :segmentType')
|
||||
->setParameter('segmentType', SegmentEntity::TYPE_WC_USERS)
|
||||
->andWhere('s.isWoocommerceUser = true')
|
||||
->getQuery()
|
||||
->setMaxResults(1)
|
||||
->execute();
|
||||
|
||||
return count($subscribers) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int - number of processed ids
|
||||
*/
|
||||
|
Reference in New Issue
Block a user