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

View File

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