8889841cwp-content/plugins/mailpoet/lib/Segments/DynamicSegments/Filters/SubscriberSegment.php000064400000004563150513103130033134 0ustar00home/clixcotz/tcchp.clix.co.tzentityManager = $entityManager; } public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterEntity $filter): QueryBuilder { $filterData = $filter->getFilterData(); $segments = $filterData->getParam('segments'); $operator = $filterData->getParam('operator'); $parameterSuffix = $filter->getId() ?: Security::generateRandomString(); $statusSubscribedParam = 'subscribed' . $parameterSuffix; $segmentsParam = 'segments' . $parameterSuffix; $subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName(); $subscriberSegmentTable = $this->entityManager->getClassMetadata(SubscriberSegmentEntity::class)->getTableName(); $queryBuilder->leftJoin( $subscribersTable, $subscriberSegmentTable, 'subscriber_segments', "$subscribersTable.id = subscriber_segments.subscriber_id" . ' AND subscriber_segments.status = :' . $statusSubscribedParam . ' AND subscriber_segments.segment_id IN (:' . $segmentsParam . ')' ); $queryBuilder->setParameter($statusSubscribedParam, SubscriberEntity::STATUS_SUBSCRIBED); $queryBuilder->setParameter($segmentsParam, $segments, Connection::PARAM_INT_ARRAY); if ($operator === DynamicSegmentFilterData::OPERATOR_NONE) { $queryBuilder->andWhere('subscriber_segments.id IS NULL'); } else { $queryBuilder->andWhere('subscriber_segments.id IS NOT NULL'); } if ($operator === DynamicSegmentFilterData::OPERATOR_ALL) { $queryBuilder->groupBy('subscriber_id'); $queryBuilder->having('COUNT(1) = ' . count($segments)); } return $queryBuilder; } }