Add a bulk unsubscribe server side action
[MAILPOET-2978]
This commit is contained in:
@ -513,6 +513,8 @@ class Subscribers extends APIEndpoint {
|
||||
$count = $this->subscribersRepository->bulkAddToSegment($segment, $ids);
|
||||
} elseif ($data['action'] === 'moveToList' && $segment instanceof SegmentEntity) {
|
||||
$count = $this->subscribersRepository->bulkMoveToSegment($segment, $ids);
|
||||
} elseif ($data['action'] === 'unsubscribe') {
|
||||
$count = $this->subscribersRepository->bulkUnsubscribe($ids);
|
||||
} else {
|
||||
throw UnexpectedValueException::create()
|
||||
->withErrors([APIError::BAD_REQUEST => "Invalid bulk action '{$data['action']}' provided."]);
|
||||
|
@ -177,7 +177,7 @@ class SubscribersRepository extends Repository {
|
||||
->setParameter('ids', $ids)
|
||||
->setParameter('segment', $segment)
|
||||
->getQuery()->execute();
|
||||
|
||||
|
||||
$this->entityManager->transactional(function (EntityManager $entityManager) use ($subscribers, $segment) {
|
||||
foreach ($subscribers as $subscriber) {
|
||||
$subscriberSegment = new SubscriberSegmentEntity($segment, $subscriber, SubscriberEntity::STATUS_SUBSCRIBED);
|
||||
@ -199,5 +199,17 @@ class SubscribersRepository extends Repository {
|
||||
|
||||
$this->bulkRemoveFromAllSegments($ids);
|
||||
return $this->bulkAddToSegment($segment, $ids);
|
||||
}
|
||||
}
|
||||
|
||||
public function bulkUnsubscribe(array $ids): int {
|
||||
$this->entityManager->createQueryBuilder()
|
||||
->update(SubscriberEntity::class, 's')
|
||||
->set('s.status', ':status')
|
||||
->where('s.id IN (:ids)')
|
||||
->setParameter('status', SubscriberEntity::STATUS_UNSUBSCRIBED)
|
||||
->setParameter('ids', $ids)
|
||||
->getQuery()->execute();
|
||||
|
||||
return count($ids);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user