PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / lib / Newsletter / NewsletterDeleteController.php
mailpoet / lib / Newsletter Last commit date
Editor 2 months ago Embed 1 month ago Links 2 months ago Listing 9 months ago Options 2 years ago Preview 1 month ago Renderer 5 days ago RestApi 1 week ago Scheduler 5 days ago Segment 1 year ago Sending 1 week ago Sharing 1 month ago Shortcodes 3 days ago Statistics 1 week ago ViewInBrowser 1 month ago ApiDataSanitizer.php 3 years ago AutomatedLatestContent.php 2 months ago AutomaticEmailsRepository.php 3 years ago BlockPostQuery.php 2 months ago BulkActionController.php 1 month ago BulkActionException.php 1 month ago DynamicProducts.php 11 months ago NewsletterCoupon.php 2 months ago NewsletterDeleteController.php 2 years ago NewsletterHtmlSanitizer.php 2 years ago NewsletterPostsRepository.php 2 years ago NewsletterResendController.php 5 days ago NewsletterSaveController.php 1 month ago NewsletterValidator.php 1 year ago NewslettersRepository.php 2 weeks ago StatusController.php 1 month ago Url.php 2 months ago index.php 3 years ago
NewsletterDeleteController.php
160 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Newsletter;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Cron\Workers\StatsNotifications\NewsletterLinkRepository;
9 use MailPoet\Cron\Workers\StatsNotifications\StatsNotificationsRepository;
10 use MailPoet\Entities\NewsletterEntity;
11 use MailPoet\Entities\SendingQueueEntity;
12 use MailPoet\Entities\StatsNotificationEntity;
13 use MailPoet\Newsletter\Options\NewsletterOptionsRepository;
14 use MailPoet\Newsletter\Segment\NewsletterSegmentRepository;
15 use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
16 use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository;
17 use MailPoet\Newsletter\Sending\SendingQueuesRepository;
18 use MailPoet\Statistics\StatisticsClicksRepository;
19 use MailPoet\Statistics\StatisticsNewslettersRepository;
20 use MailPoet\Statistics\StatisticsOpensRepository;
21 use MailPoet\Statistics\StatisticsWooCommercePurchasesRepository;
22 use MailPoet\WP\Functions as WPFunctions;
23 use MailPoetVendor\Doctrine\ORM\EntityManager;
24 use Throwable;
25
26 class NewsletterDeleteController {
27 private EntityManager $entityManager;
28 private NewslettersRepository $newslettersRepository;
29 private NewsletterLinkRepository $newsletterLinkRepository;
30 private NewsletterOptionsRepository $newsletterOptionsRepository;
31 private NewsletterPostsRepository $newsletterPostsRepository;
32 private NewsletterSegmentRepository $newsletterSegmentRepository;
33 private ScheduledTasksRepository $scheduledTasksRepository;
34 private ScheduledTaskSubscribersRepository $scheduledTaskSubscribersRepository;
35 private SendingQueuesRepository $sendingQueuesRepository;
36 private StatisticsClicksRepository $statisticsClicksRepository;
37 private StatisticsNewslettersRepository $statisticsNewslettersRepository;
38 private StatisticsOpensRepository $statisticsOpensRepository;
39 private StatisticsWooCommercePurchasesRepository $statisticsWooCommercePurchasesRepository;
40 private StatsNotificationsRepository $statsNotificationsRepository;
41 private WPFunctions $wp;
42
43 public function __construct(
44 EntityManager $entityManager,
45 NewslettersRepository $newslettersRepository,
46 NewsletterLinkRepository $newsletterLinkRepository,
47 NewsletterOptionsRepository $newsletterOptionsRepository,
48 NewsletterPostsRepository $newsletterPostsRepository,
49 NewsletterSegmentRepository $newsletterSegmentRepository,
50 ScheduledTasksRepository $scheduledTasksRepository,
51 ScheduledTaskSubscribersRepository $scheduledTaskSubscribersRepository,
52 SendingQueuesRepository $sendingQueuesRepository,
53 StatisticsClicksRepository $statisticsClicksRepository,
54 StatisticsNewslettersRepository $statisticsNewslettersRepository,
55 StatisticsOpensRepository $statisticsOpensRepository,
56 StatisticsWooCommercePurchasesRepository $statisticsWooCommercePurchasesRepository,
57 StatsNotificationsRepository $statsNotificationsRepository,
58 WPFunctions $wp
59 ) {
60 $this->entityManager = $entityManager;
61 $this->newslettersRepository = $newslettersRepository;
62 $this->newsletterLinkRepository = $newsletterLinkRepository;
63 $this->newsletterOptionsRepository = $newsletterOptionsRepository;
64 $this->newsletterPostsRepository = $newsletterPostsRepository;
65 $this->newsletterSegmentRepository = $newsletterSegmentRepository;
66 $this->scheduledTasksRepository = $scheduledTasksRepository;
67 $this->scheduledTaskSubscribersRepository = $scheduledTaskSubscribersRepository;
68 $this->sendingQueuesRepository = $sendingQueuesRepository;
69 $this->statisticsClicksRepository = $statisticsClicksRepository;
70 $this->statisticsNewslettersRepository = $statisticsNewslettersRepository;
71 $this->statisticsOpensRepository = $statisticsOpensRepository;
72 $this->statisticsWooCommercePurchasesRepository = $statisticsWooCommercePurchasesRepository;
73 $this->statsNotificationsRepository = $statsNotificationsRepository;
74 $this->wp = $wp;
75 }
76
77 /** @param int[] $ids */
78 public function bulkDelete(array $ids): int {
79 if (!$ids) {
80 return 0;
81 }
82
83 // Fetch children ids for deleting
84 $childrenIds = $this->newslettersRepository->fetchChildrenIds($ids);
85 $ids = array_merge($ids, $childrenIds);
86
87 $this->entityManager->beginTransaction();
88 try {
89 // Delete statistics data
90 $this->statisticsNewslettersRepository->deleteByNewsletterIds($ids);
91 $this->statisticsOpensRepository->deleteByNewsletterIds($ids);
92 $this->statisticsClicksRepository->deleteByNewsletterIds($ids);
93
94 // Update WooCommerce statistics and remove newsletter and click id
95 $this->statisticsWooCommercePurchasesRepository->removeNewsletterDataByNewsletterIds($ids);
96
97 // Delete newsletter posts, options, links, and segments
98 $this->newsletterPostsRepository->deleteByNewsletterIds($ids);
99 $this->newsletterOptionsRepository->deleteByNewsletterIds($ids);
100 $this->newsletterLinkRepository->deleteByNewsletterIds($ids);
101 $this->newsletterSegmentRepository->deleteByNewsletterIds($ids);
102
103 // Delete stats notifications and related tasks
104 /** @var string[] $taskIds */
105 $taskIds = $this->entityManager->createQueryBuilder()
106 ->select('IDENTITY(sn.task)')
107 ->from(StatsNotificationEntity::class, 'sn')
108 ->where('sn.newsletter IN (:ids)')
109 ->setParameter('ids', $ids)
110 ->getQuery()
111 ->getSingleColumnResult();
112 $taskIds = array_map('intval', $taskIds);
113
114 $this->scheduledTasksRepository->deleteByIds($taskIds);
115 $this->statsNotificationsRepository->deleteByNewsletterIds($ids);
116
117 // Delete scheduled task subscribers, scheduled tasks, and sending queues
118 /** @var string[] $taskIds */
119 $taskIds = $this->entityManager->createQueryBuilder()
120 ->select('IDENTITY(q.task)')
121 ->from(SendingQueueEntity::class, 'q')
122 ->where('q.newsletter IN (:ids)')
123 ->setParameter('ids', $ids)
124 ->getQuery()
125 ->getSingleColumnResult();
126 $taskIds = array_map('intval', $taskIds);
127
128 $this->scheduledTaskSubscribersRepository->deleteByTaskIds($taskIds);
129 $this->scheduledTasksRepository->deleteByIds($taskIds);
130 $this->sendingQueuesRepository->deleteByNewsletterIds($ids);
131
132 // Fetch WP Posts IDs and delete them
133 /** @var string[] $wpPostIds */
134 $wpPostIds = $this->entityManager->createQueryBuilder()
135 ->select('IDENTITY(n.wpPost) AS id')
136 ->from(NewsletterEntity::class, 'n')
137 ->where('n.id IN (:ids)')
138 ->andWhere('n.wpPost IS NOT NULL')
139 ->setParameter('ids', $ids)
140 ->getQuery()
141 ->getSingleColumnResult();
142 $wpPostIds = array_map('intval', $wpPostIds);
143
144 foreach ($wpPostIds as $wpPostId) {
145 $this->wp->wpDeletePost($wpPostId, true);
146 }
147
148 // Delete newsletter entities
149 $this->newslettersRepository->deleteByIds($ids);
150
151 $this->entityManager->commit();
152 } catch (Throwable $e) {
153 $this->entityManager->rollback();
154 throw $e;
155 }
156
157 return count($ids);
158 }
159 }
160