Add support for segment displayInManageSubscriptionPage on Subscription management page

MAILPOET-4669
This commit is contained in:
Oluwaseun Olorunsola
2022-11-02 13:19:25 +01:00
committed by Aschepikov
parent 48181994d8
commit e64dc1669f
2 changed files with 10 additions and 24 deletions

View File

@@ -9,7 +9,6 @@ use MailPoet\Entities\SubscriberSegmentEntity;
use MailPoet\Form\Util\FieldNameObfuscator; use MailPoet\Form\Util\FieldNameObfuscator;
use MailPoet\Newsletter\Scheduler\WelcomeScheduler; use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
use MailPoet\Segments\SegmentsRepository; use MailPoet\Segments\SegmentsRepository;
use MailPoet\Settings\SettingsController;
use MailPoet\Statistics\Track\Unsubscribes; use MailPoet\Statistics\Track\Unsubscribes;
use MailPoet\Subscribers\LinkTokens; use MailPoet\Subscribers\LinkTokens;
use MailPoet\Subscribers\NewSubscriberNotificationMailer; use MailPoet\Subscribers\NewSubscriberNotificationMailer;
@@ -29,9 +28,6 @@ class Manage {
/** @var LinkTokens */ /** @var LinkTokens */
private $linkTokens; private $linkTokens;
/** @var SettingsController */
private $settings;
/** @var Unsubscribes */ /** @var Unsubscribes */
private $unsubscribesTracker; private $unsubscribesTracker;
@@ -61,7 +57,6 @@ class Manage {
FieldNameObfuscator $fieldNameObfuscator, FieldNameObfuscator $fieldNameObfuscator,
LinkTokens $linkTokens, LinkTokens $linkTokens,
Unsubscribes $unsubscribesTracker, Unsubscribes $unsubscribesTracker,
SettingsController $settings,
NewSubscriberNotificationMailer $newSubscriberNotificationMailer, NewSubscriberNotificationMailer $newSubscriberNotificationMailer,
WelcomeScheduler $welcomeScheduler, WelcomeScheduler $welcomeScheduler,
CustomFieldsRepository $customFieldsRepository, CustomFieldsRepository $customFieldsRepository,
@@ -74,7 +69,6 @@ class Manage {
$this->fieldNameObfuscator = $fieldNameObfuscator; $this->fieldNameObfuscator = $fieldNameObfuscator;
$this->unsubscribesTracker = $unsubscribesTracker; $this->unsubscribesTracker = $unsubscribesTracker;
$this->linkTokens = $linkTokens; $this->linkTokens = $linkTokens;
$this->settings = $settings;
$this->newSubscriberNotificationMailer = $newSubscriberNotificationMailer; $this->newSubscriberNotificationMailer = $newSubscriberNotificationMailer;
$this->welcomeScheduler = $welcomeScheduler; $this->welcomeScheduler = $welcomeScheduler;
$this->segmentsRepository = $segmentsRepository; $this->segmentsRepository = $segmentsRepository;
@@ -140,7 +134,6 @@ class Manage {
if (isset($subscriberData['segments']) && is_array($subscriberData['segments'])) { if (isset($subscriberData['segments']) && is_array($subscriberData['segments'])) {
$segmentsIds = $subscriberData['segments']; $segmentsIds = $subscriberData['segments'];
} }
$allowedSegments = $this->settings->get('subscription.segments', false);
// Unsubscribe from all other segments already subscribed to // Unsubscribe from all other segments already subscribed to
// but don't change disallowed segments // but don't change disallowed segments
@@ -150,7 +143,7 @@ class Manage {
continue; continue;
} }
if ($allowedSegments && !in_array($segment->getId(), $allowedSegments)) { if (empty($segment->getDisplayInManageSubscriptionPage())) {
continue; continue;
} }
if (!in_array($segment->getId(), $segmentsIds)) { if (!in_array($segment->getId(), $segmentsIds)) {
@@ -173,15 +166,15 @@ class Manage {
}, $subscriberSegments)); }, $subscriberSegments));
$newSegmentIds = array_diff($segmentsIds, $currentSegmentIds); $newSegmentIds = array_diff($segmentsIds, $currentSegmentIds);
// Allow subscribing only to allowed segments
if ($allowedSegments) {
$segmentsIds = array_intersect($segmentsIds, $allowedSegments);
}
foreach ($segmentsIds as $segmentId) { foreach ($segmentsIds as $segmentId) {
$segment = $this->segmentsRepository->findOneById($segmentId); $segment = $this->segmentsRepository->findOneById($segmentId);
if (!$segment) { if (!$segment) {
continue; continue;
} }
// Allow subscribing only to allowed segments
if (empty($segment->getDisplayInManageSubscriptionPage())) {
continue;
}
$this->subscriberSegmentRepository->createOrUpdate( $this->subscriberSegmentRepository->createOrUpdate(
$subscriber, $subscriber,
$segment, $segment,

View File

@@ -10,7 +10,6 @@ use MailPoet\Entities\SubscriberEntity;
use MailPoet\Form\Block\Date as FormBlockDate; use MailPoet\Form\Block\Date as FormBlockDate;
use MailPoet\Form\Renderer as FormRenderer; use MailPoet\Form\Renderer as FormRenderer;
use MailPoet\Segments\SegmentsRepository; use MailPoet\Segments\SegmentsRepository;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\LinkTokens; use MailPoet\Subscribers\LinkTokens;
use MailPoet\Util\Helpers; use MailPoet\Util\Helpers;
use MailPoet\Util\Url as UrlHelper; use MailPoet\Util\Url as UrlHelper;
@@ -21,9 +20,6 @@ class ManageSubscriptionFormRenderer {
const FORM_STATE_SUCCESS = 'success'; const FORM_STATE_SUCCESS = 'success';
const FORM_STATE_NOT_SUBMITTED = 'not_submitted'; const FORM_STATE_NOT_SUBMITTED = 'not_submitted';
/** @var SettingsController */
private $settings;
/** @var UrlHelper */ /** @var UrlHelper */
private $urlHelper; private $urlHelper;
@@ -50,7 +46,6 @@ class ManageSubscriptionFormRenderer {
public function __construct( public function __construct(
WPFunctions $wp, WPFunctions $wp,
SettingsController $settings,
UrlHelper $urlHelper, UrlHelper $urlHelper,
LinkTokens $linkTokens, LinkTokens $linkTokens,
FormRenderer $formRenderer, FormRenderer $formRenderer,
@@ -60,7 +55,6 @@ class ManageSubscriptionFormRenderer {
SegmentsRepository $segmentsRepository SegmentsRepository $segmentsRepository
) { ) {
$this->wp = $wp; $this->wp = $wp;
$this->settings = $settings;
$this->urlHelper = $urlHelper; $this->urlHelper = $urlHelper;
$this->linkTokens = $linkTokens; $this->linkTokens = $linkTokens;
$this->formRenderer = $formRenderer; $this->formRenderer = $formRenderer;
@@ -227,13 +221,12 @@ class ManageSubscriptionFormRenderer {
} }
private function getSegmentField(SubscriberEntity $subscriber): array { private function getSegmentField(SubscriberEntity $subscriber): array {
$segmentIds = $this->settings->get('subscription.segments', []);
// Get default segments // Get default segments
$criteria = ['type' => SegmentEntity::TYPE_DEFAULT, 'deletedAt' => null]; $criteria = [
if (!empty($segmentIds)) { 'type' => SegmentEntity::TYPE_DEFAULT,
$criteria['id'] = $segmentIds; 'deletedAt' => null,
} 'displayInManageSubscriptionPage' => 1,
];
$segments = $this->segmentsRepository->findBy($criteria, ['name' => Criteria::ASC]); $segments = $this->segmentsRepository->findBy($criteria, ['name' => Criteria::ASC]);
$subscribedSegmentIds = []; $subscribedSegmentIds = [];