diff --git a/mailpoet/lib/EmailEditor/Integrations/MailPoet/EmailApiController.php b/mailpoet/lib/EmailEditor/Integrations/MailPoet/EmailApiController.php index 081d0a765c..afdbcd035b 100644 --- a/mailpoet/lib/EmailEditor/Integrations/MailPoet/EmailApiController.php +++ b/mailpoet/lib/EmailEditor/Integrations/MailPoet/EmailApiController.php @@ -54,6 +54,17 @@ class EmailApiController { $this->newsletterRepository->flush(); } + public function trashEmail(\WP_Post $wpPost) { + $newsletter = $this->newsletterRepository->findOneBy(['wpPost' => $wpPost->ID]); + if (!$newsletter) { + throw new NotFoundException('Newsletter was not found'); + } + if ($newsletter->getWpPostId() !== $wpPost->ID) { + throw new UnexpectedValueException('Newsletter ID does not match the post ID'); + } + $this->newsletterRepository->bulkTrash([$newsletter->getId()]); + } + public function getEmailDataSchema(): array { return Builder::object([ 'id' => Builder::integer()->nullable(), diff --git a/mailpoet/lib/EmailEditor/Integrations/MailPoet/EmailEditor.php b/mailpoet/lib/EmailEditor/Integrations/MailPoet/EmailEditor.php index 711c9788a7..43e6532040 100644 --- a/mailpoet/lib/EmailEditor/Integrations/MailPoet/EmailEditor.php +++ b/mailpoet/lib/EmailEditor/Integrations/MailPoet/EmailEditor.php @@ -34,6 +34,7 @@ class EmailEditor { } $this->cli->initialize(); $this->wp->addFilter('mailpoet_email_editor_post_types', [$this, 'addEmailPostType']); + $this->wp->addAction('rest_delete_mailpoet_email', [$this->emailApiController, 'trashEmail'], 10, 1); $this->extendEmailPostApi(); } diff --git a/mailpoet/lib/Newsletter/NewslettersRepository.php b/mailpoet/lib/Newsletter/NewslettersRepository.php index e9b2403466..55a6b5e9db 100644 --- a/mailpoet/lib/Newsletter/NewslettersRepository.php +++ b/mailpoet/lib/Newsletter/NewslettersRepository.php @@ -312,6 +312,13 @@ class NewslettersRepository extends Repository { WHERE q.`newsletter_id` IN (:ids) ", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]); + // Trash CPT. + $wpPostIds = $this->getWpPostIds($ids); + + foreach ($wpPostIds as $wpPostId) { + wp_trash_post($wpPostId); + } + return count($ids); } @@ -352,6 +359,12 @@ class NewslettersRepository extends Repository { WHERE q.`newsletter_id` IN (:ids) ", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]); + // Untrash CPT. + $wpPostIds = $this->getWpPostIds($ids); + + foreach ($wpPostIds as $wpPostId) { + wp_untrash_post($wpPostId); + } return count($ids); } @@ -556,4 +569,20 @@ class NewslettersRepository extends Repository { ->getSingleColumnResult(); return array_map('intval', $ids); } + + public function getWpPostIds(array $ids): array { + /** @var string[] $wpPostIds */ + $wpPostIds = $this->entityManager->createQueryBuilder() + ->select('IDENTITY(n.wpPost) AS id') + ->from(NewsletterEntity::class, 'n') + ->where('n.id IN (:ids)') + ->andWhere('n.wpPost IS NOT NULL') + ->setParameter('ids', $ids) + ->getQuery() + ->getSingleColumnResult(); + + $wpPostIds = array_map('intval', $wpPostIds); + + return $wpPostIds; + } }