Save or update subscriber's tags
[MAILPOET-4440]
This commit is contained in:
@ -8,10 +8,12 @@ use MailPoet\Doctrine\Validator\ValidationException;
|
||||
use MailPoet\Entities\StatisticsUnsubscribeEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Entities\SubscriberSegmentEntity;
|
||||
use MailPoet\Entities\SubscriberTagEntity;
|
||||
use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
|
||||
use MailPoet\Segments\SegmentsRepository;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Statistics\Track\Unsubscribes;
|
||||
use MailPoet\Tags\TagRepository;
|
||||
use MailPoet\Util\Security;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
@ -38,6 +40,12 @@ class SubscriberSaveController {
|
||||
/** @var SubscriberSegmentRepository */
|
||||
private $subscriberSegmentRepository;
|
||||
|
||||
/** @var SubscriberTagRepository */
|
||||
private $subscriberTagRepository;
|
||||
|
||||
/** @var TagRepository */
|
||||
private $tagRepository;
|
||||
|
||||
/** @var Unsubscribes */
|
||||
private $unsubscribesTracker;
|
||||
|
||||
@ -55,6 +63,8 @@ class SubscriberSaveController {
|
||||
SubscriberCustomFieldRepository $subscriberCustomFieldRepository,
|
||||
SubscribersRepository $subscribersRepository,
|
||||
SubscriberSegmentRepository $subscriberSegmentRepository,
|
||||
SubscriberTagRepository $subscriberTagRepository,
|
||||
TagRepository $tagRepository,
|
||||
Unsubscribes $unsubscribesTracker,
|
||||
WelcomeScheduler $welcomeScheduler,
|
||||
WPFunctions $wp
|
||||
@ -66,9 +76,11 @@ class SubscriberSaveController {
|
||||
$this->subscriberSegmentRepository = $subscriberSegmentRepository;
|
||||
$this->subscribersRepository = $subscribersRepository;
|
||||
$this->subscriberCustomFieldRepository = $subscriberCustomFieldRepository;
|
||||
$this->tagRepository = $tagRepository;
|
||||
$this->unsubscribesTracker = $unsubscribesTracker;
|
||||
$this->welcomeScheduler = $welcomeScheduler;
|
||||
$this->wp = $wp;
|
||||
$this->subscriberTagRepository = $subscriberTagRepository;
|
||||
}
|
||||
|
||||
public function filterOutReservedColumns(array $subscriberData): array {
|
||||
@ -107,6 +119,10 @@ class SubscriberSaveController {
|
||||
$data['segments'] = array_merge($data['segments'], $this->getNonDefaultSubscribedSegments($data));
|
||||
$newSegments = $this->findNewSegments($data);
|
||||
|
||||
if (empty($data['tags'])) {
|
||||
$data['tags'] = [];
|
||||
}
|
||||
|
||||
$oldSubscriber = $this->findSubscriber($data);
|
||||
$oldStatus = $oldSubscriber ? $oldSubscriber->getStatus() : null;
|
||||
if (
|
||||
@ -131,6 +147,7 @@ class SubscriberSaveController {
|
||||
$subscriber = $this->createOrUpdate($data, $oldSubscriber);
|
||||
|
||||
$this->updateCustomFields($data, $subscriber);
|
||||
$this->updateTags($data, $subscriber);
|
||||
|
||||
$segments = isset($data['segments']) ? $this->findSegments($data['segments']) : null;
|
||||
// check for status change
|
||||
@ -277,4 +294,27 @@ class SubscriberSaveController {
|
||||
$this->subscriberCustomFieldRepository->createOrUpdate($subscriber, $customField, $customFieldsMap[$customField->getId()]);
|
||||
}
|
||||
}
|
||||
|
||||
private function updateTags(array $data, SubscriberEntity $subscriber): void {
|
||||
foreach ($subscriber->getSubscriberTags() as $subscriberTag) {
|
||||
$tag = $subscriberTag->getTag();
|
||||
if (!$tag) {
|
||||
continue;
|
||||
}
|
||||
if (!in_array($tag->getName(), $data['tags'], true)) {
|
||||
$subscriber->getSubscriberTags()->removeElement($subscriberTag);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($data['tags'] as $tagName) {
|
||||
$tag = $this->tagRepository->createOrUpdate(['name' => $tagName]);
|
||||
$subscriberTag = $subscriber->getSubscriberTag($tag);
|
||||
if (!$subscriberTag) {
|
||||
$subscriberTag = new SubscriberTagEntity($tag, $subscriber);
|
||||
$subscriber->getSubscriberTags()->add($subscriberTag);
|
||||
$this->subscriberTagRepository->persist($subscriberTag);
|
||||
}
|
||||
}
|
||||
$this->subscriberTagRepository->flush();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user