Add custom fields to the response
[MAILPOET-2653]
This commit is contained in:
@ -2,11 +2,13 @@
|
|||||||
|
|
||||||
namespace MailPoet\API\JSON\ResponseBuilders;
|
namespace MailPoet\API\JSON\ResponseBuilders;
|
||||||
|
|
||||||
|
use MailPoet\CustomFields\CustomFieldsRepository;
|
||||||
|
use MailPoet\Entities\NewsletterEntity;
|
||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
use MailPoet\Entities\SubscriberCustomFieldEntity;
|
use MailPoet\Entities\SubscriberCustomFieldEntity;
|
||||||
use MailPoet\Entities\NewsletterEntity;
|
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Statistics\StatisticsUnsubscribesRepository;
|
use MailPoet\Statistics\StatisticsUnsubscribesRepository;
|
||||||
|
use MailPoet\Subscribers\SubscriberCustomFieldRepository;
|
||||||
use MailPoet\Subscribers\SubscriberSegmentRepository;
|
use MailPoet\Subscribers\SubscriberSegmentRepository;
|
||||||
|
|
||||||
class SubscribersResponseBuilder {
|
class SubscribersResponseBuilder {
|
||||||
@ -17,12 +19,22 @@ class SubscribersResponseBuilder {
|
|||||||
/** @var StatisticsUnsubscribesRepository */
|
/** @var StatisticsUnsubscribesRepository */
|
||||||
private $statisticsUnsubscribesRepository;
|
private $statisticsUnsubscribesRepository;
|
||||||
|
|
||||||
|
/** @var CustomFieldsRepository */
|
||||||
|
private $customFieldsRepository;
|
||||||
|
|
||||||
|
/** @var SubscriberCustomFieldRepository */
|
||||||
|
private $subscriberCustomFieldRepository;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
SubscriberSegmentRepository $subscriberSegmentRepository,
|
SubscriberSegmentRepository $subscriberSegmentRepository,
|
||||||
|
CustomFieldsRepository $customFieldsRepository,
|
||||||
|
SubscriberCustomFieldRepository $subscriberCustomFieldRepository,
|
||||||
StatisticsUnsubscribesRepository $statisticsUnsubscribesRepository
|
StatisticsUnsubscribesRepository $statisticsUnsubscribesRepository
|
||||||
) {
|
) {
|
||||||
$this->subscriberSegmentRepository = $subscriberSegmentRepository;
|
$this->subscriberSegmentRepository = $subscriberSegmentRepository;
|
||||||
$this->statisticsUnsubscribesRepository = $statisticsUnsubscribesRepository;
|
$this->statisticsUnsubscribesRepository = $statisticsUnsubscribesRepository;
|
||||||
|
$this->customFieldsRepository = $customFieldsRepository;
|
||||||
|
$this->subscriberCustomFieldRepository = $subscriberCustomFieldRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function build(SubscriberEntity $subscriberEntity): array {
|
public function build(SubscriberEntity $subscriberEntity): array {
|
||||||
@ -32,13 +44,12 @@ class SubscribersResponseBuilder {
|
|||||||
'is_woocommerce_user' => $subscriberEntity->getIsWoocommerceUser(),
|
'is_woocommerce_user' => $subscriberEntity->getIsWoocommerceUser(),
|
||||||
'subscriptions' => $this->buildSubscriptions($subscriberEntity),
|
'subscriptions' => $this->buildSubscriptions($subscriberEntity),
|
||||||
'unsubscribes' => $this->buildUnsubscribes($subscriberEntity),
|
'unsubscribes' => $this->buildUnsubscribes($subscriberEntity),
|
||||||
// TODO custom fields
|
|
||||||
'status' => $subscriberEntity->getStatus(),
|
'status' => $subscriberEntity->getStatus(),
|
||||||
'last_name' => $subscriberEntity->getLastName(),
|
'last_name' => $subscriberEntity->getLastName(),
|
||||||
'first_name' => $subscriberEntity->getFirstName(),
|
'first_name' => $subscriberEntity->getFirstName(),
|
||||||
'email' => $subscriberEntity->getEmail(),
|
'email' => $subscriberEntity->getEmail(),
|
||||||
];
|
];
|
||||||
|
$data = $this->buildCustomFields($subscriberEntity, $data);
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,4 +91,18 @@ class SubscribersResponseBuilder {
|
|||||||
}
|
}
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function buildCustomFields(SubscriberEntity $subscriberEntity, array $data): array {
|
||||||
|
$customFields = $this->customFieldsRepository->findAll();
|
||||||
|
|
||||||
|
foreach ($customFields as $customField) {
|
||||||
|
$subscriberCustomField = $this->subscriberCustomFieldRepository->findOneBy(
|
||||||
|
['subscriber' => $subscriberEntity, 'customField' => $customField]
|
||||||
|
);
|
||||||
|
if ($subscriberCustomField instanceof SubscriberCustomFieldEntity) {
|
||||||
|
$data['cf_' . $customField->getId()] = $subscriberCustomField->getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -238,6 +238,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$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);
|
$container->autowire(\MailPoet\Subscribers\SubscriberSegmentRepository::class);
|
||||||
|
$container->autowire(\MailPoet\Subscribers\SubscriberCustomFieldRepository::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);
|
||||||
|
67
lib/Entities/SubscriberCustomFieldEntity.php
Normal file
67
lib/Entities/SubscriberCustomFieldEntity.php
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MailPoet\Entities;
|
||||||
|
|
||||||
|
use MailPoet\Doctrine\EntityTraits\AutoincrementedIdTrait;
|
||||||
|
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_custom_field")
|
||||||
|
*/
|
||||||
|
class SubscriberCustomFieldEntity {
|
||||||
|
use AutoincrementedIdTrait;
|
||||||
|
use CreatedAtTrait;
|
||||||
|
use UpdatedAtTrait;
|
||||||
|
use SafeToOneAssociationLoadTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\ManyToOne(targetEntity="MailPoet\Entities\SubscriberEntity")
|
||||||
|
* @var SubscriberEntity|null
|
||||||
|
*/
|
||||||
|
private $subscriber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\ManyToOne(targetEntity="MailPoet\Entities\CustomFieldEntity")
|
||||||
|
* @var CustomFieldEntity|null
|
||||||
|
*/
|
||||||
|
private $customField;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\Column(type="string")
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $value;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
SubscriberEntity $subscriber,
|
||||||
|
CustomFieldEntity $customField,
|
||||||
|
string $value
|
||||||
|
) {
|
||||||
|
$this->subscriber = $subscriber;
|
||||||
|
$this->customField = $customField;
|
||||||
|
$this->value = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return SubscriberEntity|null
|
||||||
|
*/
|
||||||
|
public function getSubscriber() {
|
||||||
|
$this->safelyLoadToOneAssociation('subscriber');
|
||||||
|
return $this->subscriber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getValue(): string {
|
||||||
|
return $this->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return CustomFieldEntity|null
|
||||||
|
*/
|
||||||
|
public function getCustomField() {
|
||||||
|
return $this->customField;
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Entities;
|
namespace MailPoet\Entities;
|
||||||
|
|
||||||
|
use MailPoet\Doctrine\EntityTraits\AutoincrementedIdTrait;
|
||||||
use MailPoet\Doctrine\EntityTraits\CreatedAtTrait;
|
use MailPoet\Doctrine\EntityTraits\CreatedAtTrait;
|
||||||
use MailPoet\Doctrine\EntityTraits\SafeToOneAssociationLoadTrait;
|
use MailPoet\Doctrine\EntityTraits\SafeToOneAssociationLoadTrait;
|
||||||
use MailPoet\Doctrine\EntityTraits\UpdatedAtTrait;
|
use MailPoet\Doctrine\EntityTraits\UpdatedAtTrait;
|
||||||
@ -12,6 +13,7 @@ use MailPoetVendor\Doctrine\ORM\Mapping as ORM;
|
|||||||
* @ORM\Table(name="subscriber_segment")
|
* @ORM\Table(name="subscriber_segment")
|
||||||
*/
|
*/
|
||||||
class SubscriberSegmentEntity {
|
class SubscriberSegmentEntity {
|
||||||
|
use AutoincrementedIdTrait;
|
||||||
use CreatedAtTrait;
|
use CreatedAtTrait;
|
||||||
use UpdatedAtTrait;
|
use UpdatedAtTrait;
|
||||||
use SafeToOneAssociationLoadTrait;
|
use SafeToOneAssociationLoadTrait;
|
||||||
|
15
lib/Subscribers/SubscriberCustomFieldRepository.php
Normal file
15
lib/Subscribers/SubscriberCustomFieldRepository.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MailPoet\Subscribers;
|
||||||
|
|
||||||
|
use MailPoet\Doctrine\Repository;
|
||||||
|
use MailPoet\Entities\SubscriberCustomFieldEntity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @extends Repository<SubscriberCustomFieldEntity>
|
||||||
|
*/
|
||||||
|
class SubscriberCustomFieldRepository extends Repository {
|
||||||
|
protected function getEntityClassName() {
|
||||||
|
return SubscriberCustomFieldEntity::class;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user