Refactor subscription segments selection from old model to api
[MAILPOET-3297]
This commit is contained in:
committed by
Veljko V
parent
af574f7e1b
commit
441cb86a76
@ -7,9 +7,11 @@ use MailPoet\API\JSON\Error as APIError;
|
||||
use MailPoet\API\JSON\Response as APIResponse;
|
||||
use MailPoet\API\JSON\ResponseBuilders\SubscribersResponseBuilder;
|
||||
use MailPoet\Config\AccessControl;
|
||||
use MailPoet\Entities\FormEntity;
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Entities\StatisticsUnsubscribeEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Form\FormsRepository;
|
||||
use MailPoet\Form\Util\FieldNameObfuscator;
|
||||
use MailPoet\Listing;
|
||||
use MailPoet\Models\Form;
|
||||
@ -90,6 +92,9 @@ class Subscribers extends APIEndpoint {
|
||||
/** @var WelcomeScheduler */
|
||||
private $welcomeScheduler;
|
||||
|
||||
/** @var FormsRepository */
|
||||
private $formsRepository;
|
||||
|
||||
public function __construct(
|
||||
SubscriberActions $subscriberActions,
|
||||
RequiredCustomFieldValidator $requiredCustomFieldValidator,
|
||||
@ -106,7 +111,8 @@ class Subscribers extends APIEndpoint {
|
||||
SubscriberListingRepository $subscriberListingRepository,
|
||||
SegmentsRepository $segmentsRepository,
|
||||
FieldNameObfuscator $fieldNameObfuscator,
|
||||
WelcomeScheduler $welcomeScheduler
|
||||
WelcomeScheduler $welcomeScheduler,
|
||||
FormsRepository $formsRepository
|
||||
) {
|
||||
$this->subscriberActions = $subscriberActions;
|
||||
$this->requiredCustomFieldValidator = $requiredCustomFieldValidator;
|
||||
@ -124,6 +130,7 @@ class Subscribers extends APIEndpoint {
|
||||
$this->subscriberListingRepository = $subscriberListingRepository;
|
||||
$this->segmentsRepository = $segmentsRepository;
|
||||
$this->welcomeScheduler = $welcomeScheduler;
|
||||
$this->formsRepository = $formsRepository;
|
||||
}
|
||||
|
||||
public function get($data = []) {
|
||||
@ -176,9 +183,10 @@ class Subscribers extends APIEndpoint {
|
||||
public function subscribe($data = []) {
|
||||
$formId = (isset($data['form_id']) ? (int)$data['form_id'] : false);
|
||||
$form = Form::findOne($formId);
|
||||
$formEntity = $this->formsRepository->findOneById($formId);
|
||||
unset($data['form_id']);
|
||||
|
||||
if (!$form instanceof Form) {
|
||||
if (!$form instanceof Form || !$formEntity instanceof FormEntity) {
|
||||
return $this->badRequest([
|
||||
APIError::BAD_REQUEST => WPFunctions::get()->__('Please specify a valid form ID.', 'mailpoet'),
|
||||
]);
|
||||
@ -218,7 +226,7 @@ class Subscribers extends APIEndpoint {
|
||||
? (array)$data['segments']
|
||||
: []
|
||||
);
|
||||
$segmentIds = $form->filterSegments($segmentIds);
|
||||
$segmentIds = $this->getSegmentsForSubscription($formEntity, $segmentIds);
|
||||
unset($data['segments']);
|
||||
|
||||
if (empty($segmentIds)) {
|
||||
@ -548,4 +556,13 @@ class Subscribers extends APIEndpoint {
|
||||
? $this->segmentsRepository->findOneById((int)$data['segment_id'])
|
||||
: null;
|
||||
}
|
||||
|
||||
private function getSegmentsForSubscription(FormEntity $formEntity, array $submittedSegmentIds = []): array {
|
||||
// If form contains segment selection blocks allow only segments ids configured in those blocks
|
||||
$segmentBlocksSegmentIds = $formEntity->getSegmentBlocksSegmentIds();
|
||||
if (!empty($segmentBlocksSegmentIds)) {
|
||||
return array_intersect($submittedSegmentIds, $segmentBlocksSegmentIds);
|
||||
}
|
||||
return $formEntity->getSettingsSegmentIds();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user