Add control for selecting segments

[MAILPOET-3502]
This commit is contained in:
Pavel Dohnal
2021-11-23 13:13:47 +01:00
committed by Veljko V
parent 4870b2a319
commit dcc8eccb42
7 changed files with 92 additions and 5 deletions

View File

@@ -8,9 +8,11 @@ use MailPoet\Cache\TransientCache;
use MailPoet\Config\ServicesChecker;
use MailPoet\CustomFields\CustomFieldsRepository;
use MailPoet\Entities\DynamicSegmentFilterData;
use MailPoet\Entities\SegmentEntity;
use MailPoet\Listing\PageLimit;
use MailPoet\Models\Newsletter;
use MailPoet\Segments\SegmentDependencyValidator;
use MailPoet\Segments\SegmentsRepository;
use MailPoet\Services\Bridge;
use MailPoet\Settings\SettingsController;
use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
@@ -18,6 +20,7 @@ use MailPoet\WooCommerce\Helper as WooCommerceHelper;
use MailPoet\WP\AutocompletePostListLoader as WPPostListLoader;
use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon;
use MailPoetVendor\Doctrine\Common\Collections\Criteria;
class Segments {
/** @var PageRenderer */
@@ -56,6 +59,9 @@ class Segments {
/** @var TransientCache */
private $transientCache;
/** @var SegmentsRepository */
private $segmentsRepository;
public function __construct(
PageRenderer $pageRenderer,
PageLimit $listingPageLimit,
@@ -68,6 +74,7 @@ class Segments {
CustomFieldsRepository $customFieldsRepository,
CustomFieldsResponseBuilder $customFieldsResponseBuilder,
SegmentDependencyValidator $segmentDependencyValidator,
SegmentsRepository $segmentsRepository,
TransientCache $transientCache
) {
$this->pageRenderer = $pageRenderer;
@@ -82,6 +89,7 @@ class Segments {
$this->customFieldsRepository = $customFieldsRepository;
$this->customFieldsResponseBuilder = $customFieldsResponseBuilder;
$this->transientCache = $transientCache;
$this->segmentsRepository = $segmentsRepository;
}
public function render() {
@@ -112,6 +120,22 @@ class Segments {
->where('type', Newsletter::TYPE_STANDARD)
->orderByExpr('ISNULL(sent_at) DESC, sent_at DESC')->findArray();
$data['static_segments_list'] = [];
$criteria = new Criteria();
$criteria->where(Criteria::expr()->isNull('deletedAt'));
$criteria->andWhere(Criteria::expr()->neq('type', SegmentEntity::TYPE_DYNAMIC));
$criteria->orderBy(['name' => 'ASC']);
$segments = $this->segmentsRepository->matching($criteria);
foreach ($segments as $segment) {
$data['static_segments_list'][] = [
'id' => $segment->getId(),
'name' => $segment->getName(),
'type' => $segment->getType(),
'description' => $segment->getDescription(),
];
}
$data['product_categories'] = $this->wpPostListLoader->getWooCommerceCategories();
$data['products'] = $this->wpPostListLoader->getProducts();