Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
fb94413256 | |||
7b23f86445 |
@ -15,7 +15,6 @@ use MailPoet\WP\Functions as WPFunctions;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
use MailPoetVendor\Doctrine\DBAL\Connection;
|
||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||
use MailPoetVendor\Doctrine\ORM\Query;
|
||||
|
||||
/**
|
||||
* @extends Repository<SegmentEntity>
|
||||
@ -227,13 +226,17 @@ class SegmentsRepository extends Repository {
|
||||
* Returns count of segments that have more than one dynamic filter
|
||||
*/
|
||||
public function getSegmentCountWithMultipleFilters(): int {
|
||||
$qb = $this->entityManager->createQueryBuilder()
|
||||
->select('COUNT(DISTINCT s.id) AS segmentCount')
|
||||
->from(SegmentEntity::class, 's')
|
||||
->join('s.dynamicFilters', 'ds')
|
||||
->groupBy('ds.segment')
|
||||
->having('COUNT(ds.id) > 1');
|
||||
$result = $qb->getQuery()->getOneOrNullResult(Query::HYDRATE_ARRAY);
|
||||
return (int)($result['segmentCount'] ?? 0);
|
||||
$segmentFiltersTable = $this->entityManager->getClassMetadata(DynamicSegmentFilterEntity::class)->getTableName();
|
||||
$qbInner = $this->entityManager->getConnection()->createQueryBuilder()
|
||||
->select('COUNT(DISTINCT sf.id) AS segmentCount')
|
||||
->from($segmentFiltersTable, 'sf')
|
||||
->groupBy('sf.segment_id')
|
||||
->having('COUNT(sf.id) > 1');
|
||||
$result = $this->entityManager->getConnection()->createQueryBuilder()
|
||||
->select('count(*)')
|
||||
->from(sprintf('(%s) as subCounts', $qbInner->getSQL()))
|
||||
->execute()
|
||||
->fetchOne();
|
||||
return (int)$result;
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
/*
|
||||
* Plugin Name: MailPoet 3 (New)
|
||||
* Version: 3.73.1
|
||||
* Version: 3.73.2
|
||||
* Plugin URI: http://www.mailpoet.com
|
||||
* Description: Create and send newsletters, post notifications and welcome emails from your WordPress.
|
||||
* Author: MailPoet
|
||||
@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
$mailpoetPlugin = [
|
||||
'version' => '3.73.1',
|
||||
'version' => '3.73.2',
|
||||
'filename' => __FILE__,
|
||||
'path' => dirname(__FILE__),
|
||||
'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',
|
||||
|
@ -3,7 +3,7 @@ Contributors: mailpoet
|
||||
Tags: email, email marketing, post notification, woocommerce emails, email automation, newsletter, newsletter builder, newsletter subscribers
|
||||
Requires at least: 5.3
|
||||
Tested up to: 5.8
|
||||
Stable tag: 3.73.1
|
||||
Stable tag: 3.73.2
|
||||
Requires PHP: 7.1
|
||||
License: GPLv3
|
||||
License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
||||
@ -184,6 +184,9 @@ Check our [Knowledge Base](https://kb.mailpoet.com) or contact us through our [s
|
||||
|
||||
== Changelog ==
|
||||
|
||||
= 3.73.2 - 2021-11-08 =
|
||||
* Fixed: error on dynamic segments filter query.
|
||||
|
||||
= 3.73.1 - 2021-11-04 =
|
||||
* Fixed: segments are not loading.
|
||||
|
||||
|
@ -69,6 +69,44 @@ class SegmentsRepositoryTest extends \MailPoetTest {
|
||||
expect($segment2->getDeletedAt())->null();
|
||||
}
|
||||
|
||||
public function testItReturnsCountsOfSegmentsWithMultipleFilters() {
|
||||
// No Segments
|
||||
$count = $this->segmentsRepository->getSegmentCountWithMultipleFilters();
|
||||
expect($count)->equals(0);
|
||||
|
||||
// Two segments with one filter each
|
||||
$segment1 = $this->createDynamicSegmentEntityForEditorUsers();
|
||||
$segment2 = $this->createDynamicSegmentEntityForEditorUsers();
|
||||
$count = $this->segmentsRepository->getSegmentCountWithMultipleFilters();
|
||||
expect($count)->equals(0);
|
||||
|
||||
// One segment with multiple filters
|
||||
$filterData = new DynamicSegmentFilterData(
|
||||
DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||
UserRole::TYPE,
|
||||
['wordpressRole' => 'editor']
|
||||
);
|
||||
$dynamicFilter = new DynamicSegmentFilterEntity($segment1, $filterData);
|
||||
$this->entityManager->persist($dynamicFilter);
|
||||
$segment1->addDynamicFilter($dynamicFilter);
|
||||
$this->segmentsRepository->flush();
|
||||
$count = $this->segmentsRepository->getSegmentCountWithMultipleFilters();
|
||||
expect($count)->equals(1);
|
||||
|
||||
// Both segments with multiple filters
|
||||
$filterData = new DynamicSegmentFilterData(
|
||||
DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||
UserRole::TYPE,
|
||||
['wordpressRole' => 'editor']
|
||||
);
|
||||
$dynamicFilter = new DynamicSegmentFilterEntity($segment2, $filterData);
|
||||
$this->entityManager->persist($dynamicFilter);
|
||||
$segment1->addDynamicFilter($dynamicFilter);
|
||||
$this->segmentsRepository->flush();
|
||||
$count = $this->segmentsRepository->getSegmentCountWithMultipleFilters();
|
||||
expect($count)->equals(2);
|
||||
}
|
||||
|
||||
private function createDefaultSegment(string $name): SegmentEntity {
|
||||
$segment = new SegmentEntity($name, SegmentEntity::TYPE_DEFAULT, 'description');
|
||||
$this->entityManager->persist($segment);
|
||||
|
Reference in New Issue
Block a user