From f4c2e4880a54bd88181a953c8404d9df403946b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lys=C3=BD?= Date: Mon, 7 Jun 2021 12:13:38 +0200 Subject: [PATCH] Add dynamic filter connect type to response [MAILPOET-3469] --- lib/API/JSON/ResponseBuilders/SegmentsResponseBuilder.php | 3 +++ lib/Entities/DynamicSegmentFilterData.php | 3 +++ lib/Segments/DynamicSegments/FilterHandler.php | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/API/JSON/ResponseBuilders/SegmentsResponseBuilder.php b/lib/API/JSON/ResponseBuilders/SegmentsResponseBuilder.php index bb8acc7a7a..284d937cb0 100644 --- a/lib/API/JSON/ResponseBuilders/SegmentsResponseBuilder.php +++ b/lib/API/JSON/ResponseBuilders/SegmentsResponseBuilder.php @@ -2,6 +2,7 @@ namespace MailPoet\API\JSON\ResponseBuilders; +use MailPoet\Entities\DynamicSegmentFilterData; use MailPoet\Entities\SegmentEntity; use MailPoet\Segments\SegmentSubscribersRepository; use MailPoet\WP\Functions; @@ -24,6 +25,7 @@ class SegmentsResponseBuilder { } public function build(SegmentEntity $segment): array { + $firstFilter = $segment->getDynamicFilters()->first(); return [ 'id' => (string)$segment->getId(), // (string) for BC 'name' => $segment->getName(), @@ -33,6 +35,7 @@ class SegmentsResponseBuilder { 'updated_at' => $segment->getUpdatedAt()->format(self::DATE_FORMAT), 'deleted_at' => ($deletedAt = $segment->getDeletedAt()) ? $deletedAt->format(self::DATE_FORMAT) : null, 'average_engagement_score' => $segment->getAverageEngagementScore(), + 'filters_connect' => $firstFilter && isset($firstFilter->getFilterData['connect']) ? $firstFilter->getFilterData['connect'] : DynamicSegmentFilterData::CONNECT_TYPE_AND, ]; } diff --git a/lib/Entities/DynamicSegmentFilterData.php b/lib/Entities/DynamicSegmentFilterData.php index 56551134b1..427caf1708 100644 --- a/lib/Entities/DynamicSegmentFilterData.php +++ b/lib/Entities/DynamicSegmentFilterData.php @@ -13,6 +13,9 @@ class DynamicSegmentFilterData { const TYPE_WOOCOMMERCE = 'woocommerce'; const TYPE_WOOCOMMERCE_SUBSCRIPTION = 'woocommerceSubscription'; + public const CONNECT_TYPE_AND = 'and'; + public const CONNECT_TYPE_OR = 'or'; + /** * @ORM\Column(type="serialized_array") * @var array|null diff --git a/lib/Segments/DynamicSegments/FilterHandler.php b/lib/Segments/DynamicSegments/FilterHandler.php index 22c70a52da..4c45e94f9f 100644 --- a/lib/Segments/DynamicSegments/FilterHandler.php +++ b/lib/Segments/DynamicSegments/FilterHandler.php @@ -2,6 +2,7 @@ namespace MailPoet\Segments\DynamicSegments; +use MailPoet\Entities\DynamicSegmentFilterData; use MailPoet\Entities\SegmentEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\Segments\SegmentDependencyValidator; @@ -62,7 +63,7 @@ class FilterHandler { $data = $filterData->getData(); $subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName(); - if (!isset($data['connect']) || $data['connect'] === 'or') { + if (!isset($data['connect']) || $data['connect'] === DynamicSegmentFilterData::CONNECT_TYPE_OR) { // the final query: SELECT * FROM subscribers INNER JOIN (filter_select1 UNION filter_select2) filtered_subscribers ON filtered_subscribers.inner_subscriber_id = id $queryBuilder->innerJoin( $subscribersTable,