Refactor dynamic segments listings to doctrine

[MAILPOET-3361]
This commit is contained in:
Pavel Dohnal
2021-01-08 10:44:02 +01:00
committed by Veljko V
parent 11c9c3cd93
commit 822550f3c0
6 changed files with 110 additions and 39 deletions

View File

@@ -0,0 +1,49 @@
<?php
namespace MailPoet\API\JSON\ResponseBuilders;
use MailPoet\Entities\SegmentEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Segments\SegmentSubscribersRepository;
use MailPoet\WP\Functions;
class DynamicSegmentsResponseBuilder {
const DATE_FORMAT = 'Y-m-d H:i:s';
/** @var SegmentsResponseBuilder */
private $segmentsResponseBuilder;
/** @var Functions */
private $wp;
/** @var SegmentSubscribersRepository */
private $segmentSubscriberRepository;
public function __construct(
Functions $wp,
SegmentSubscribersRepository $segmentSubscriberRepository,
SegmentsResponseBuilder $segmentsResponseBuilder
) {
$this->segmentsResponseBuilder = $segmentsResponseBuilder;
$this->segmentSubscriberRepository = $segmentSubscriberRepository;
$this->wp = $wp;
}
public function buildForListing(array $segments): array {
$data = [];
foreach ($segments as $segment) {
$data[] = $this->buildListingItem($segment);
}
return $data;
}
private function buildListingItem(SegmentEntity $segment): array {
$data = $this->segmentsResponseBuilder->build($segment);
$data['subscribers_url'] = $this->wp->adminUrl(
'admin.php?page=mailpoet-subscribers#/filter[segment=' . $segment->getId() . ']'
);
$data['count_all'] = $this->segmentSubscriberRepository->getSubscribersCount((int)$segment->getId());
$data['count_subscribed'] = $this->segmentSubscriberRepository->getSubscribersCount((int)$segment->getId(), SubscriberEntity::STATUS_SUBSCRIBED);
return $data;
}
}