From 91c34e43b3321b2b90d0ba3f37de9b8c3bc02e05 Mon Sep 17 00:00:00 2001 From: Pavel Dohnal Date: Tue, 11 Jan 2022 10:30:32 +0100 Subject: [PATCH] Fix clicked segments [MAILPOET-4045] --- .../DynamicSegmentsResponseBuilder.php | 12 ++++++++---- .../DynamicSegments/FilterDataMapper.php | 16 ++++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/lib/API/JSON/ResponseBuilders/DynamicSegmentsResponseBuilder.php b/lib/API/JSON/ResponseBuilders/DynamicSegmentsResponseBuilder.php index ec4b645dd9..083f35b3db 100644 --- a/lib/API/JSON/ResponseBuilders/DynamicSegmentsResponseBuilder.php +++ b/lib/API/JSON/ResponseBuilders/DynamicSegmentsResponseBuilder.php @@ -63,10 +63,14 @@ class DynamicSegmentsResponseBuilder { } if (($filter['segmentType'] === DynamicSegmentFilterData::TYPE_EMAIL)) { // compatibility with older filters - if (isset($filter['newsletter_id']) && !isset($filter['newsletters'])) { - // make sure the newsletters are an array - $filter['newsletters'] = [intval($filter['newsletter_id'])]; - unset($filter['newsletter_id']); + if ((($filter['action'] === EmailAction::ACTION_OPENED) || ($filter['action'] === EmailAction::ACTION_NOT_OPENED))) { + if (isset($filter['newsletter_id']) && !isset($filter['newsletters'])) { + // make sure the newsletters are an array + $filter['newsletters'] = [intval($filter['newsletter_id'])]; + unset($filter['newsletter_id']); + } + } else { + $filter['newsletter_id'] = intval($filter['newsletter_id']); } if ($filter['action'] === EmailAction::ACTION_NOT_OPENED) { // convert not opened diff --git a/lib/Segments/DynamicSegments/FilterDataMapper.php b/lib/Segments/DynamicSegments/FilterDataMapper.php index c6793b361c..1a9f824861 100644 --- a/lib/Segments/DynamicSegments/FilterDataMapper.php +++ b/lib/Segments/DynamicSegments/FilterDataMapper.php @@ -147,14 +147,22 @@ class FilterDataMapper { 'connect' => $data['connect'], ]); } - if (empty($data['newsletters']) || !is_array($data['newsletters'])) throw new InvalidFilterException('Missing newsletter', InvalidFilterException::MISSING_NEWSLETTER_ID); + $filterData = [ - 'newsletters' => array_map(function ($segmentId) { - return intval($segmentId); - }, $data['newsletters']), 'connect' => $data['connect'], 'operator' => $data['operator'] ?? DynamicSegmentFilterData::OPERATOR_ANY, ]; + + if (($data['action'] !== EmailAction::ACTION_OPENED) && ($data['action'] !== EmailAction::ACTION_NOT_OPENED)) { + if (empty($data['newsletter_id'])) throw new InvalidFilterException('Missing newsletter id', InvalidFilterException::MISSING_NEWSLETTER_ID); + $filterData['newsletter_id'] = $data['newsletter_id']; + } else { + if (empty($data['newsletters']) || !is_array($data['newsletters'])) throw new InvalidFilterException('Missing newsletter', InvalidFilterException::MISSING_NEWSLETTER_ID); + $filterData['newsletters'] = array_map(function ($segmentId) { + return intval($segmentId); + }, $data['newsletters']); + } + $filterType = DynamicSegmentFilterData::TYPE_EMAIL; $action = $data['action']; if (isset($data['link_id'])) {