Add filter class for WooCommerce subscriptions filter
[MAILPOET-3471]
This commit is contained in:
committed by
Veljko V
parent
743a26d8df
commit
2f7f4536a2
@ -274,6 +274,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\Segments\DynamicSegments\Filters\WooCommerceCategory::class)->setPublic(true);
|
$container->autowire(\MailPoet\Segments\DynamicSegments\Filters\WooCommerceCategory::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Segments\DynamicSegments\Filters\WooCommerceNumberOfOrders::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\WooCommerceProduct::class)->setPublic(true);
|
||||||
|
$container->autowire(\MailPoet\Segments\DynamicSegments\Filters\WooCommerceSubscription::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Segments\DynamicSegments\SegmentSaveController::class)->setPublic(true);
|
$container->autowire(\MailPoet\Segments\DynamicSegments\SegmentSaveController::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Segments\DynamicSegments\FilterDataMapper::class)->setPublic(true);
|
$container->autowire(\MailPoet\Segments\DynamicSegments\FilterDataMapper::class)->setPublic(true);
|
||||||
// Services
|
// Services
|
||||||
|
@ -11,6 +11,7 @@ class DynamicSegmentFilterData {
|
|||||||
const TYPE_USER_ROLE = 'userRole';
|
const TYPE_USER_ROLE = 'userRole';
|
||||||
const TYPE_EMAIL = 'email';
|
const TYPE_EMAIL = 'email';
|
||||||
const TYPE_WOOCOMMERCE = 'woocommerce';
|
const TYPE_WOOCOMMERCE = 'woocommerce';
|
||||||
|
const TYPE_WOOCOMMERCE_SUBSCRIPTION = 'woocommerceSubscription';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ORM\Column(type="serialized_array")
|
* @ORM\Column(type="serialized_array")
|
||||||
|
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MailPoet\Segments\DynamicSegments\Filters;
|
||||||
|
|
||||||
|
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
||||||
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
|
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
|
||||||
|
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||||
|
|
||||||
|
class WooCommerceSubscription implements Filter {
|
||||||
|
const ACTION_HAS_ACTIVE = 'hasActiveSubscription';
|
||||||
|
|
||||||
|
/** @var EntityManager */
|
||||||
|
private $entityManager;
|
||||||
|
|
||||||
|
public function __construct(EntityManager $entityManager) {
|
||||||
|
$this->entityManager = $entityManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterEntity $filter): QueryBuilder {
|
||||||
|
global $wpdb;
|
||||||
|
$filterData = $filter->getFilterData();
|
||||||
|
$productId = (int)$filterData->getParam('product_id');
|
||||||
|
$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"
|
||||||
|
)->innerJoin('postmeta',
|
||||||
|
$wpdb->posts,
|
||||||
|
'posts',
|
||||||
|
'postmeta.post_id = posts.id AND posts.post_type = "shop_subscription" AND posts.post_status = "wc-active"'
|
||||||
|
)->innerJoin('postmeta',
|
||||||
|
$wpdb->prefix . 'woocommerce_order_items',
|
||||||
|
'items',
|
||||||
|
'postmeta.post_id = items.order_id'
|
||||||
|
)->innerJoin(
|
||||||
|
'items',
|
||||||
|
$wpdb->prefix . 'woocommerce_order_itemmeta',
|
||||||
|
'itemmeta',
|
||||||
|
"itemmeta.order_item_id=items.order_item_id AND itemmeta.meta_key='_product_id' AND itemmeta.meta_value=:product" . $filter->getId()
|
||||||
|
)->setParameter('product' . $filter->getId(), $productId);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user