diff --git a/lib/API/JSON/v1/Segments.php b/lib/API/JSON/v1/Segments.php index 7dbed1a000..087c4927b6 100644 --- a/lib/API/JSON/v1/Segments.php +++ b/lib/API/JSON/v1/Segments.php @@ -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(); diff --git a/lib/Segments/SegmentsRepository.php b/lib/Segments/SegmentsRepository.php index dd70b166fb..14001dcbe4 100644 --- a/lib/Segments/SegmentsRepository.php +++ b/lib/Segments/SegmentsRepository.php @@ -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;