Move groups definitions
[MAILPOET-3168]
This commit is contained in:
@ -12,7 +12,6 @@ use MailPoet\Entities\SegmentEntity;
|
|||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Listing;
|
use MailPoet\Listing;
|
||||||
use MailPoet\Models\Segment;
|
use MailPoet\Models\Segment;
|
||||||
use MailPoet\Newsletter\Segment\NewsletterSegmentRepository;
|
|
||||||
use MailPoet\Segments\SegmentListingRepository;
|
use MailPoet\Segments\SegmentListingRepository;
|
||||||
use MailPoet\Segments\SegmentSaveController;
|
use MailPoet\Segments\SegmentSaveController;
|
||||||
use MailPoet\Segments\SegmentsRepository;
|
use MailPoet\Segments\SegmentsRepository;
|
||||||
@ -44,9 +43,6 @@ class Segments extends APIEndpoint {
|
|||||||
/** @var SubscribersRepository */
|
/** @var SubscribersRepository */
|
||||||
private $subscribersRepository;
|
private $subscribersRepository;
|
||||||
|
|
||||||
/** @var NewsletterSegmentRepository */
|
|
||||||
private $newsletterSegmentRepository;
|
|
||||||
|
|
||||||
/** @var WooCommerce */
|
/** @var WooCommerce */
|
||||||
private $wooCommerceSync;
|
private $wooCommerceSync;
|
||||||
|
|
||||||
@ -98,15 +94,6 @@ class Segments extends APIEndpoint {
|
|||||||
$groups = $this->segmentListingRepository->getGroups($definition);
|
$groups = $this->segmentListingRepository->getGroups($definition);
|
||||||
$segments = $this->segmentsResponseBuilder->buildForListing($items);
|
$segments = $this->segmentsResponseBuilder->buildForListing($items);
|
||||||
|
|
||||||
// $data = [];
|
|
||||||
// foreach ($listingData['items'] as $segment) {
|
|
||||||
//
|
|
||||||
// $segmentData = $segment
|
|
||||||
// ->withSubscribersCount()
|
|
||||||
// ->asArray();
|
|
||||||
//$data[] = $segmentData;
|
|
||||||
// }
|
|
||||||
|
|
||||||
return $this->successResponse($segments, [
|
return $this->successResponse($segments, [
|
||||||
'count' => $count,
|
'count' => $count,
|
||||||
'filters' => $filters,
|
'filters' => $filters,
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace MailPoet\Models;
|
namespace MailPoet\Models;
|
||||||
|
|
||||||
use MailPoet\Entities\NewsletterEntity;
|
|
||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
use MailPoet\WooCommerce\Helper as WCHelper;
|
use MailPoet\WooCommerce\Helper as WCHelper;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
@ -162,6 +161,9 @@ class Segment extends Model {
|
|||||||
return $wcSegment;
|
return $wcSegment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use the non static implementation in \MailPoet\Segments\WooCommerce::shouldShowWooCommerceSegment instead
|
||||||
|
*/
|
||||||
public static function shouldShowWooCommerceSegment() {
|
public static function shouldShowWooCommerceSegment() {
|
||||||
$woocommerceHelper = new WCHelper();
|
$woocommerceHelper = new WCHelper();
|
||||||
$isWoocommerceActive = $woocommerceHelper->isWooCommerceActive();
|
$isWoocommerceActive = $woocommerceHelper->isWooCommerceActive();
|
||||||
@ -189,29 +191,6 @@ class Segment extends Model {
|
|||||||
return $types;
|
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) {
|
public static function groupBy($orm, $group = null) {
|
||||||
if ($group === 'trash') {
|
if ($group === 'trash') {
|
||||||
$orm->whereNotNull('deleted_at');
|
$orm->whereNotNull('deleted_at');
|
||||||
|
@ -3,13 +3,26 @@
|
|||||||
namespace MailPoet\Segments;
|
namespace MailPoet\Segments;
|
||||||
|
|
||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
|
use MailPoet\Listing\ListingDefinition;
|
||||||
use MailPoet\Listing\ListingRepository;
|
use MailPoet\Listing\ListingRepository;
|
||||||
use MailPoet\Util\Helpers;
|
use MailPoet\Util\Helpers;
|
||||||
|
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||||
use MailPoetVendor\Doctrine\ORM\QueryBuilder;
|
use MailPoetVendor\Doctrine\ORM\QueryBuilder;
|
||||||
|
|
||||||
class SegmentListingRepository extends ListingRepository {
|
class SegmentListingRepository extends ListingRepository {
|
||||||
const DEFAULT_SORT_BY = 'name';
|
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) {
|
protected function applySelectClause(QueryBuilder $queryBuilder) {
|
||||||
$queryBuilder->select("PARTIAL s.{id,name,type,description,createdAt,updatedAt,deletedAt}");
|
$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) {
|
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
|
$queryBuilder
|
||||||
->andWhere('s.type IN (:type)')
|
->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) {
|
protected function applySorting(QueryBuilder $queryBuilder, string $sortBy, string $sortOrder) {
|
||||||
@ -48,4 +65,40 @@ class SegmentListingRepository extends ListingRepository {
|
|||||||
}
|
}
|
||||||
$queryBuilder->addOrderBy("s.$sortBy", $sortOrder);
|
$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\Models\SubscriberSegment;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
use MailPoet\Subscribers\Source;
|
use MailPoet\Subscribers\Source;
|
||||||
|
use MailPoet\Subscribers\SubscribersRepository;
|
||||||
|
use MailPoet\WooCommerce\Helper as WCHelper;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
use MailPoetVendor\Idiorm\ORM;
|
use MailPoetVendor\Idiorm\ORM;
|
||||||
|
|
||||||
@ -25,14 +27,34 @@ class WooCommerce {
|
|||||||
private $mailpoetEmailCollation;
|
private $mailpoetEmailCollation;
|
||||||
private $wpPostmetaValueCollation;
|
private $wpPostmetaValueCollation;
|
||||||
|
|
||||||
|
/** @var SubscribersRepository */
|
||||||
|
private $subscribersRepository;
|
||||||
|
|
||||||
|
/** @var WCHelper */
|
||||||
|
private $woocommerceHelper;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
SettingsController $settings,
|
SettingsController $settings,
|
||||||
WPFunctions $wp,
|
WPFunctions $wp,
|
||||||
|
WCHelper $woocommerceHelper,
|
||||||
|
SubscribersRepository $subscribersRepository,
|
||||||
WP $wpSegment
|
WP $wpSegment
|
||||||
) {
|
) {
|
||||||
$this->settings = $settings;
|
$this->settings = $settings;
|
||||||
$this->wp = $wp;
|
$this->wp = $wp;
|
||||||
$this->wpSegment = $wpSegment;
|
$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) {
|
public function synchronizeRegisteredCustomer($wpUserId, $currentFilter = null) {
|
||||||
|
@ -213,6 +213,23 @@ class SubscribersRepository extends Repository {
|
|||||||
return count($subscribers);
|
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
|
* @return int - number of processed ids
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user