diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index 7a845542aa..5d19499fd9 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -277,6 +277,7 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\Segments\DynamicSegments\Filters\UserRole::class)->setPublic(true); $container->autowire(\MailPoet\Segments\DynamicSegments\Filters\SubscriberSubscribedDate::class)->setPublic(true); $container->autowire(\MailPoet\Segments\DynamicSegments\Filters\WooCommerceCategory::class)->setPublic(true); + $container->autowire(\MailPoet\Segments\DynamicSegments\Filters\WooCommerceCountry::class)->setPublic(true); $container->autowire(\MailPoet\Segments\DynamicSegments\Filters\WooCommerceNumberOfOrders::class)->setPublic(true); $container->autowire(\MailPoet\Segments\DynamicSegments\Filters\WooCommerceProduct::class)->setPublic(true); $container->autowire(\MailPoet\Segments\DynamicSegments\Filters\WooCommerceTotalSpent::class)->setPublic(true); diff --git a/lib/Segments/DynamicSegments/Filters/WooCommerceCountry.php b/lib/Segments/DynamicSegments/Filters/WooCommerceCountry.php new file mode 100644 index 0000000000..05ca8f5e7b --- /dev/null +++ b/lib/Segments/DynamicSegments/Filters/WooCommerceCountry.php @@ -0,0 +1,39 @@ +entityManager = $entityManager; + } + + public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterEntity $filter): QueryBuilder { + global $wpdb; + $filterData = $filter->getFilterData(); + $countryCode = (string)$filterData->getParam('country_code'); + $countryFilterParam = 'countryCode' . $filter->getId(); + $subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName(); + return $queryBuilder->innerJoin( + $subscribersTable, + $wpdb->postmeta, + 'postmeta', + "postmeta.meta_key = '_customer_user' + AND $subscribersTable.wp_user_id=postmeta.meta_value + AND postmeta.post_id NOT IN ( SELECT id FROM {$wpdb->posts} as p WHERE p.post_status IN ('wc-cancelled', 'wc-failed'))" + )->innerJoin('postmeta', + $wpdb->postmeta, + 'postmetaCountry', + "postmeta.post_id = postmetaCountry.post_id AND postmetaCountry.meta_key = '_billing_country' AND postmetaCountry.meta_value = :$countryFilterParam" + )->setParameter($countryFilterParam, $countryCode); + } +}