Add subscriptions to the response

[MAILPOET-2653]
This commit is contained in:
Pavel Dohnal
2020-06-25 13:30:46 +02:00
committed by Veljko V
parent 474be136f9
commit 1923dc8257
4 changed files with 112 additions and 1 deletions

View File

@ -2,16 +2,26 @@
namespace MailPoet\API\JSON\ResponseBuilders;
use MailPoet\Entities\SegmentEntity;
use MailPoet\Entities\SubscriberCustomFieldEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Subscribers\SubscriberSegmentRepository;
class SubscribersResponseBuilder {
/** @var SubscriberSegmentRepository */
private $subscriberSegmentRepository;
public function __construct(SubscriberSegmentRepository $subscriberSegmentRepository) {
$this->subscriberSegmentRepository = $subscriberSegmentRepository;
}
public function build(SubscriberEntity $subscriberEntity): array {
$data = [
'id' => $subscriberEntity->getId(),
'wp_user_id' => $subscriberEntity->getWpUserId(),
'is_woocommerce_user' => $subscriberEntity->getIsWoocommerceUser(),
'subscriptions' => [],// TODO
'subscriptions' => $this->buildSubscriptions($subscriberEntity),
'unsubscribes' => [],// TODO
// TODO custom fields
'status' => $subscriberEntity->getStatus(),
@ -22,4 +32,20 @@ class SubscribersResponseBuilder {
return $data;
}
private function buildSubscriptions(SubscriberEntity $subscriberEntity): array {
$result = [];
$subscriptions = $this->subscriberSegmentRepository->findAll(['subscriber' => $subscriberEntity]);
foreach ($subscriptions as $subscription) {
$segment = $subscription->getSegment();
if ($segment instanceof SegmentEntity) {
$result[] = [
'segment_id' => $segment->getId(),
'status' => $subscription->getStatus(),
'updated_at' => $subscription->getUpdatedAt(),
];
}
}
return $result;
}
}

View File

@ -237,6 +237,7 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\Subscribers\InactiveSubscribersController::class);
$container->autowire(\MailPoet\Subscribers\LinkTokens::class)->setPublic(true);
$container->autowire(\MailPoet\Subscribers\SubscribersRepository::class);
$container->autowire(\MailPoet\Subscribers\SubscriberSegmentRepository::class);
// Segments
$container->autowire(\MailPoet\Segments\SubscribersListings::class)->setPublic(true);
$container->autowire(\MailPoet\Segments\WooCommerce::class)->setPublic(true);

View File

@ -0,0 +1,69 @@
<?php
namespace MailPoet\Entities;
use MailPoet\Doctrine\EntityTraits\CreatedAtTrait;
use MailPoet\Doctrine\EntityTraits\SafeToOneAssociationLoadTrait;
use MailPoet\Doctrine\EntityTraits\UpdatedAtTrait;
use MailPoetVendor\Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
* @ORM\Table(name="subscriber_segment")
*/
class SubscriberSegmentEntity {
use CreatedAtTrait;
use UpdatedAtTrait;
use SafeToOneAssociationLoadTrait;
/**
* @ORM\ManyToOne(targetEntity="MailPoet\Entities\SegmentEntity")
* @var SegmentEntity|null
*/
private $segment;
/**
* @ORM\ManyToOne(targetEntity="MailPoet\Entities\SubscriberEntity")
* @var SubscriberEntity|null
*/
private $subscriber;
/**
* @ORM\Column(type="string")
* @var string
*/
private $status;
public function __construct(
SegmentEntity $segment,
SubscriberEntity $subscriber,
string $status
) {
$this->segment = $segment;
$this->subscriber = $subscriber;
$this->status = $status;
}
/**
* @return SegmentEntity|null
*/
public function getSegment() {
$this->safelyLoadToOneAssociation('segment');
return $this->segment;
}
/**
* @return SubscriberEntity|null
*/
public function getSubscriber() {
$this->safelyLoadToOneAssociation('subscriber');
return $this->subscriber;
}
/**
* @return string
*/
public function getStatus(): string {
return $this->status;
}
}

View File

@ -0,0 +1,15 @@
<?php
namespace MailPoet\Subscribers;
use MailPoet\Doctrine\Repository;
use MailPoet\Entities\SubscriberSegmentEntity;
/**
* @extends Repository<SubscriberSegmentEntity>
*/
class SubscriberSegmentRepository extends Repository {
protected function getEntityClassName() {
return SubscriberSegmentEntity::class;
}
}