Add subscriptions to the response
[MAILPOET-2653]
This commit is contained in:
@ -2,16 +2,26 @@
|
|||||||
|
|
||||||
namespace MailPoet\API\JSON\ResponseBuilders;
|
namespace MailPoet\API\JSON\ResponseBuilders;
|
||||||
|
|
||||||
|
use MailPoet\Entities\SegmentEntity;
|
||||||
|
use MailPoet\Entities\SubscriberCustomFieldEntity;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
|
use MailPoet\Subscribers\SubscriberSegmentRepository;
|
||||||
|
|
||||||
class SubscribersResponseBuilder {
|
class SubscribersResponseBuilder {
|
||||||
|
|
||||||
|
/** @var SubscriberSegmentRepository */
|
||||||
|
private $subscriberSegmentRepository;
|
||||||
|
|
||||||
|
public function __construct(SubscriberSegmentRepository $subscriberSegmentRepository) {
|
||||||
|
$this->subscriberSegmentRepository = $subscriberSegmentRepository;
|
||||||
|
}
|
||||||
|
|
||||||
public function build(SubscriberEntity $subscriberEntity): array {
|
public function build(SubscriberEntity $subscriberEntity): array {
|
||||||
$data = [
|
$data = [
|
||||||
'id' => $subscriberEntity->getId(),
|
'id' => $subscriberEntity->getId(),
|
||||||
'wp_user_id' => $subscriberEntity->getWpUserId(),
|
'wp_user_id' => $subscriberEntity->getWpUserId(),
|
||||||
'is_woocommerce_user' => $subscriberEntity->getIsWoocommerceUser(),
|
'is_woocommerce_user' => $subscriberEntity->getIsWoocommerceUser(),
|
||||||
'subscriptions' => [],// TODO
|
'subscriptions' => $this->buildSubscriptions($subscriberEntity),
|
||||||
'unsubscribes' => [],// TODO
|
'unsubscribes' => [],// TODO
|
||||||
// TODO custom fields
|
// TODO custom fields
|
||||||
'status' => $subscriberEntity->getStatus(),
|
'status' => $subscriberEntity->getStatus(),
|
||||||
@ -22,4 +32,20 @@ class SubscribersResponseBuilder {
|
|||||||
|
|
||||||
return $data;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -237,6 +237,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\Subscribers\InactiveSubscribersController::class);
|
$container->autowire(\MailPoet\Subscribers\InactiveSubscribersController::class);
|
||||||
$container->autowire(\MailPoet\Subscribers\LinkTokens::class)->setPublic(true);
|
$container->autowire(\MailPoet\Subscribers\LinkTokens::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Subscribers\SubscribersRepository::class);
|
$container->autowire(\MailPoet\Subscribers\SubscribersRepository::class);
|
||||||
|
$container->autowire(\MailPoet\Subscribers\SubscriberSegmentRepository::class);
|
||||||
// Segments
|
// Segments
|
||||||
$container->autowire(\MailPoet\Segments\SubscribersListings::class)->setPublic(true);
|
$container->autowire(\MailPoet\Segments\SubscribersListings::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Segments\WooCommerce::class)->setPublic(true);
|
$container->autowire(\MailPoet\Segments\WooCommerce::class)->setPublic(true);
|
||||||
|
69
lib/Entities/SubscriberSegmentEntity.php
Normal file
69
lib/Entities/SubscriberSegmentEntity.php
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
15
lib/Subscribers/SubscriberSegmentRepository.php
Normal file
15
lib/Subscribers/SubscriberSegmentRepository.php
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user