Use Doctrine model in trash, restore and delete
[MAILPOET-3169]
This commit is contained in:
@ -13,7 +13,6 @@ use MailPoet\Doctrine\Validator\ValidationException;
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Listing;
|
||||
use MailPoet\Models\Segment;
|
||||
use MailPoet\Segments\SegmentListingRepository;
|
||||
use MailPoet\Segments\SegmentSaveController;
|
||||
use MailPoet\Segments\SegmentsRepository;
|
||||
@ -116,23 +115,21 @@ class Segments extends APIEndpoint {
|
||||
}
|
||||
|
||||
public function restore($data = []) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$segment = Segment::findOne($id);
|
||||
if ($segment instanceof Segment) {
|
||||
$segment = $this->getSegment($data);
|
||||
if ($segment instanceof SegmentEntity) {
|
||||
// When the segment is of type WP_USERS we want to restore all its subscribers
|
||||
if ($segment->type === SegmentEntity::TYPE_WP_USERS) {
|
||||
$subscribers = $this->subscribersRepository->findBySegment((int)$segment->id);
|
||||
if ($segment->getType() === SegmentEntity::TYPE_WP_USERS) {
|
||||
$subscribers = $this->subscribersRepository->findBySegment((int)$segment->getId());
|
||||
$subscriberIds = array_map(function (SubscriberEntity $subscriberEntity): int {
|
||||
return (int)$subscriberEntity->getId();
|
||||
}, $subscribers);
|
||||
$this->subscribersRepository->bulkRestore($subscriberIds);
|
||||
}
|
||||
|
||||
$segment->restore();
|
||||
$segment = Segment::findOne($segment->id);
|
||||
if(!$segment instanceof Segment) return $this->errorResponse();
|
||||
$this->segmentsRepository->bulkRestore([$segment->getId()]);
|
||||
$this->segmentsRepository->refresh($segment);
|
||||
return $this->successResponse(
|
||||
$segment->asArray(),
|
||||
$this->segmentsResponseBuilder->build($segment),
|
||||
['count' => 1]
|
||||
);
|
||||
} else {
|
||||
@ -143,23 +140,21 @@ class Segments extends APIEndpoint {
|
||||
}
|
||||
|
||||
public function trash($data = []) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$segment = Segment::findOne($id);
|
||||
if ($segment instanceof Segment) {
|
||||
$segment = $this->getSegment($data);
|
||||
if ($segment instanceof SegmentEntity) {
|
||||
// When the segment is of type WP_USERS we want to trash all subscribers who aren't subscribed in another list
|
||||
if ($segment->type === SegmentEntity::TYPE_WP_USERS) {
|
||||
$subscribers = $this->subscribersRepository->findExclusiveSubscribersBySegment((int)$segment->id);
|
||||
if ($segment->getType() === SegmentEntity::TYPE_WP_USERS) {
|
||||
$subscribers = $this->subscribersRepository->findExclusiveSubscribersBySegment((int)$segment->getId());
|
||||
$subscriberIds = array_map(function (SubscriberEntity $subscriberEntity): int {
|
||||
return (int)$subscriberEntity->getId();
|
||||
}, $subscribers);
|
||||
$this->subscribersRepository->bulkTrash($subscriberIds);
|
||||
}
|
||||
|
||||
$segment->trash();
|
||||
$segment = Segment::findOne($segment->id);
|
||||
if(!$segment instanceof Segment) return $this->errorResponse();
|
||||
$this->segmentsRepository->bulkTrash([$segment->getId()]);
|
||||
$this->segmentsRepository->refresh($segment);
|
||||
return $this->successResponse(
|
||||
$segment->asArray(),
|
||||
$this->segmentsResponseBuilder->build($segment),
|
||||
['count' => 1]
|
||||
);
|
||||
} else {
|
||||
@ -170,10 +165,9 @@ class Segments extends APIEndpoint {
|
||||
}
|
||||
|
||||
public function delete($data = []) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$segment = Segment::findOne($id);
|
||||
if ($segment instanceof Segment) {
|
||||
$segment->delete();
|
||||
$segment = $this->getSegment($data);
|
||||
if ($segment instanceof SegmentEntity) {
|
||||
$this->segmentsRepository->bulkDelete([$segment->getId()]);
|
||||
return $this->successResponse(null, ['count' => 1]);
|
||||
} else {
|
||||
return $this->errorResponse([
|
||||
@ -206,7 +200,7 @@ class Segments extends APIEndpoint {
|
||||
|
||||
public function synchronize($data) {
|
||||
try {
|
||||
if ($data['type'] === Segment::TYPE_WC_USERS) {
|
||||
if ($data['type'] === SegmentEntity::TYPE_WC_USERS) {
|
||||
$this->wooCommerceSync->synchronizeCustomers();
|
||||
} else {
|
||||
$this->wpSegment->synchronizeUsers();
|
||||
|
@ -121,10 +121,10 @@ class SegmentsRepository extends Repository {
|
||||
$rows = $this->entityManager->createQueryBuilder()->update(SegmentEntity::class, 's')
|
||||
->set('s.deletedAt', ':deletedAt')
|
||||
->where('s.id IN (:ids)')
|
||||
->andWhere('s.type = :typeDefault')
|
||||
->andWhere('s.type IN (:types)')
|
||||
->setParameter('deletedAt', $deletedAt)
|
||||
->setParameter('ids', $ids)
|
||||
->setParameter('typeDefault', SegmentEntity::TYPE_DEFAULT)
|
||||
->setParameter('types', [SegmentEntity::TYPE_DEFAULT, SegmentEntity::TYPE_WP_USERS])
|
||||
->getQuery()->execute();
|
||||
|
||||
return $rows;
|
||||
|
Reference in New Issue
Block a user