Skip to content

Commit fd4ef35

Browse files
committed
BlacklistEmailHandler - AdvancedBounceRulesProcessor
1 parent 961e0ad commit fd4ef35

19 files changed

+204
-57
lines changed

resources/translations/messages.en.xlf

Lines changed: 89 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -115,21 +115,6 @@
115115
</target>
116116
</trans-unit>
117117

118-
<trans-unit id="messaging.email_blacklist.by_rule">
119-
<source>Email address auto blacklisted by bounce rule %rule_id%</source>
120-
<target>Email address auto blacklisted by bounce rule %rule_id%</target>
121-
</trans-unit>
122-
123-
<trans-unit id="messaging.email_blacklist.message">
124-
<source>Auto Unsubscribed</source>
125-
<target>Auto Unsubscribed</target>
126-
</trans-unit>
127-
128-
<trans-unit id="messaging.email_blacklist.details">
129-
<source>User auto unsubscribed for bounce rule %rule_id%</source>
130-
<target>User auto unsubscribed for bounce rule %rule_id%</target>
131-
</trans-unit>
132-
133118
<!-- Messaging -->
134119
<trans-unit id="messaging.imap_not_available">
135120
<source>PHP IMAP extension not available. Falling back to Webklex IMAP.</source>
@@ -196,6 +181,95 @@
196181
<target>Failed to send test email: %error%</target>
197182
</trans-unit>
198183

184+
<trans-unit id="messaging.email_blacklist.by_rule">
185+
<source>Email address auto blacklisted by bounce rule %rule_id%</source>
186+
<target>Email address auto blacklisted by bounce rule %rule_id%</target>
187+
</trans-unit>
188+
189+
<trans-unit id="messaging.email_blacklist.message">
190+
<source>Auto Unsubscribed</source>
191+
<target>Auto Unsubscribed</target>
192+
</trans-unit>
193+
194+
<trans-unit id="messaging.email_blacklist.details">
195+
<source>User auto unsubscribed for bounce rule %rule_id%</source>
196+
<target>User auto unsubscribed for bounce rule %rule_id%</target>
197+
</trans-unit>
198+
199+
<trans-unit id="messaging.email_blacklist.auto_unsubscribed">
200+
<source>email auto unsubscribed for bounce rule %rule_id%</source>
201+
<target>email auto unsubscribed for bounce rule %rule_id%</target>
202+
</trans-unit>
203+
204+
<trans-unit id="messaging.subscriber_blacklisted">
205+
<source>Subscriber auto blacklisted by bounce rule %rule_id%</source>
206+
<target>Subscriber auto blacklisted by bounce rule %rule_id%</target>
207+
</trans-unit>
208+
209+
<trans-unit id="messaging.subscriber_unsubscribed">
210+
<source>User auto unsubscribed for bounce rule %%rule_id%</source>
211+
<target>User auto unsubscribed for bounce rule %%rule_id%</target>
212+
</trans-unit>
213+
214+
<trans-unit id="messaging.auto_confirmed">
215+
<source>Auto confirmed</source>
216+
<target>Auto confirmed</target>
217+
</trans-unit>
218+
219+
<trans-unit id="messaging.auto_unconfirmed">
220+
<source>Auto unconfirmed</source>
221+
<target>Auto unconfirmed</target>
222+
</trans-unit>
223+
224+
<trans-unit id="messaging.subscriber_autoconfirmed">
225+
<source>Subscriber auto confirmed for bounce rule %rule_id%</source>
226+
<target>Subscriber auto confirmed for bounce rule %rule_id%</target>
227+
</trans-unit>
228+
229+
<trans-unit id="messaging.requeue_message">
230+
<source>Requeued campaign; next embargo at %time%</source>
231+
<target>Requeued campaign; next embargo at %time%</target>
232+
</trans-unit>
233+
234+
<trans-unit id="messaging.subscriber_unconfirmed">
235+
<source>Subscriber auto unconfirmed for bounce rule %rule_id%</source>
236+
<target>Subscriber auto unconfirmed for bounce rule %rule_id%</target>
237+
</trans-unit>
238+
239+
<trans-unit id="messaging.bounce.running_test_mode">
240+
<source>Running in test mode, not deleting messages from mailbox</source>
241+
<target>Running in test mode, not deleting messages from mailbox</target>
242+
</trans-unit>
243+
244+
<trans-unit id="messaging.bounce.running_live_mode">
245+
<source>Processed messages will be deleted from the mailbox</source>
246+
<target>Processed messages will be deleted from the mailbox</target>
247+
</trans-unit>
248+
249+
<trans-unit id="messaging.processing_bounce">
250+
<source>Processing bounces based on active bounce rules</source>
251+
<target>Processing bounces based on active bounce rules</target>
252+
</trans-unit>
253+
254+
<trans-unit id="messaging.no_active_rules">
255+
<source>No active rules</source>
256+
<target>No active rules</target>
257+
</trans-unit>
258+
259+
<trans-unit id="messaging.announce_processed_count">
260+
<source>Processed %processed% out of %total% bounces for advanced bounce rules</source>
261+
<source>Processed %processed% out of %total% bounces for advanced bounce rules</source>
262+
</trans-unit>
263+
264+
<trans-unit id="messaging.announce_processed_total">
265+
<source>%processed% bounces processed by advanced processing</source>
266+
<target>%processed% bounces processed by advanced processing</target>
267+
</trans-unit>
268+
<trans-unit id="messaging.announce_not_processed_total">
269+
<source>%not_processed% bounces were not matched by advanced processing rules</source>
270+
<target>%not_processed% bounces were not matched by advanced processing rules</target>
271+
</trans-unit>
272+
199273
<!-- Subscription -->
200274
<trans-unit id="subscription.list_not_found">
201275
<source>Subscriber list not found.</source>

src/Domain/Messaging/Service/Handler/BlacklistEmailHandler.php

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,22 @@
66

77
use PhpList\Core\Domain\Subscription\Service\Manager\SubscriberHistoryManager;
88
use PhpList\Core\Domain\Subscription\Service\SubscriberBlacklistService;
9+
use Symfony\Contracts\Translation\TranslatorInterface;
910

1011
class BlacklistEmailHandler implements BounceActionHandlerInterface
1112
{
1213
private SubscriberHistoryManager $subscriberHistoryManager;
1314
private SubscriberBlacklistService $blacklistService;
15+
private TranslatorInterface $translator;
1416

1517
public function __construct(
1618
SubscriberHistoryManager $subscriberHistoryManager,
1719
SubscriberBlacklistService $blacklistService,
20+
TranslatorInterface $translator,
1821
) {
1922
$this->subscriberHistoryManager = $subscriberHistoryManager;
2023
$this->blacklistService = $blacklistService;
24+
$this->translator = $translator;
2125
}
2226

2327
public function supports(string $action): bool
@@ -29,13 +33,17 @@ public function handle(array $closureData): void
2933
{
3034
if (!empty($closureData['subscriber'])) {
3135
$this->blacklistService->blacklist(
32-
$closureData['subscriber'],
33-
'Email address auto blacklisted by bounce rule '.$closureData['ruleId']
36+
subscriber: $closureData['subscriber'],
37+
reason: $this->translator->trans('Email address auto blacklisted by bounce rule %rule_id%', [
38+
'%rule_id%' => $closureData['ruleId']
39+
]),
3440
);
3541
$this->subscriberHistoryManager->addHistory(
3642
$closureData['subscriber'],
37-
'Auto Unsubscribed',
38-
'email auto unsubscribed for bounce rule '.$closureData['ruleId']
43+
$this->translator->trans('Auto Unsubscribed'),
44+
$this->translator->trans('email auto unsubscribed for bounce rule %rule_id%', [
45+
'%rule_id%' => $closureData['ruleId']
46+
])
3947
);
4048
}
4149
}

src/Domain/Messaging/Service/Handler/BlacklistUserAndDeleteBounceHandler.php

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,25 @@
77
use PhpList\Core\Domain\Messaging\Service\Manager\BounceManager;
88
use PhpList\Core\Domain\Subscription\Service\Manager\SubscriberHistoryManager;
99
use PhpList\Core\Domain\Subscription\Service\SubscriberBlacklistService;
10+
use Symfony\Contracts\Translation\TranslatorInterface;
1011

1112
class BlacklistUserAndDeleteBounceHandler implements BounceActionHandlerInterface
1213
{
1314
private SubscriberHistoryManager $subscriberHistoryManager;
1415
private BounceManager $bounceManager;
1516
private SubscriberBlacklistService $blacklistService;
17+
private TranslatorInterface $translator;
1618

1719
public function __construct(
1820
SubscriberHistoryManager $subscriberHistoryManager,
1921
BounceManager $bounceManager,
2022
SubscriberBlacklistService $blacklistService,
23+
TranslatorInterface $translator,
2124
) {
2225
$this->subscriberHistoryManager = $subscriberHistoryManager;
2326
$this->bounceManager = $bounceManager;
2427
$this->blacklistService = $blacklistService;
28+
$this->translator = $translator;
2529
}
2630

2731
public function supports(string $action): bool
@@ -34,12 +38,16 @@ public function handle(array $closureData): void
3438
if (!empty($closureData['subscriber']) && !$closureData['blacklisted']) {
3539
$this->blacklistService->blacklist(
3640
subscriber: $closureData['subscriber'],
37-
reason: 'Subscriber auto blacklisted by bounce rule '.$closureData['ruleId']
41+
reason: $this->translator->trans('Subscriber auto blacklisted by bounce rule %rule_id%', [
42+
'%rule_id%' => $closureData['ruleId']
43+
])
3844
);
3945
$this->subscriberHistoryManager->addHistory(
4046
subscriber: $closureData['subscriber'],
41-
message: 'Auto Unsubscribed',
42-
details: 'User auto unsubscribed for bounce rule '.$closureData['ruleId']
47+
message: $this->translator->trans('Auto Unsubscribed'),
48+
details: $this->translator->trans('User auto unsubscribed for bounce rule %rule_id%', [
49+
'%rule_id%' => $closureData['ruleId']
50+
])
4351
);
4452
}
4553
$this->bounceManager->delete($closureData['bounce']);

src/Domain/Messaging/Service/Handler/BlacklistUserHandler.php

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,22 @@
66

77
use PhpList\Core\Domain\Subscription\Service\Manager\SubscriberHistoryManager;
88
use PhpList\Core\Domain\Subscription\Service\SubscriberBlacklistService;
9+
use Symfony\Contracts\Translation\TranslatorInterface;
910

1011
class BlacklistUserHandler implements BounceActionHandlerInterface
1112
{
1213
private SubscriberHistoryManager $subscriberHistoryManager;
1314
private SubscriberBlacklistService $blacklistService;
15+
private TranslatorInterface $translator;
1416

1517
public function __construct(
1618
SubscriberHistoryManager $subscriberHistoryManager,
1719
SubscriberBlacklistService $blacklistService,
20+
TranslatorInterface $translator,
1821
) {
1922
$this->subscriberHistoryManager = $subscriberHistoryManager;
2023
$this->blacklistService = $blacklistService;
24+
$this->translator = $translator;
2125
}
2226

2327
public function supports(string $action): bool
@@ -30,12 +34,16 @@ public function handle(array $closureData): void
3034
if (!empty($closureData['subscriber']) && !$closureData['blacklisted']) {
3135
$this->blacklistService->blacklist(
3236
subscriber: $closureData['subscriber'],
33-
reason: 'Subscriber auto blacklisted by bounce rule '.$closureData['ruleId']
37+
reason: $this->translator->trans('Subscriber auto blacklisted by bounce rule %rule_id%', [
38+
'%rule_id%' => $closureData['ruleId']
39+
])
3440
);
3541
$this->subscriberHistoryManager->addHistory(
3642
subscriber: $closureData['subscriber'],
37-
message: 'Auto Unsubscribed',
38-
details: 'User auto unsubscribed for bounce rule '.$closureData['ruleId']
43+
message: $this->translator->trans('Auto Unsubscribed'),
44+
details: $this->translator->trans('User auto unsubscribed for bounce rule %rule_id%', [
45+
'%rule_id%' => $closureData['ruleId']
46+
])
3947
);
4048
}
4149
}

src/Domain/Messaging/Service/Handler/DecreaseCountConfirmUserAndDeleteBounceHandler.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,28 @@
88
use PhpList\Core\Domain\Subscription\Repository\SubscriberRepository;
99
use PhpList\Core\Domain\Subscription\Service\Manager\SubscriberHistoryManager;
1010
use PhpList\Core\Domain\Subscription\Service\Manager\SubscriberManager;
11+
use Symfony\Contracts\Translation\TranslatorInterface;
1112

1213
class DecreaseCountConfirmUserAndDeleteBounceHandler implements BounceActionHandlerInterface
1314
{
1415
private SubscriberHistoryManager $subscriberHistoryManager;
1516
private SubscriberManager $subscriberManager;
1617
private BounceManager $bounceManager;
1718
private SubscriberRepository $subscriberRepository;
19+
private TranslatorInterface $translator;
1820

1921
public function __construct(
2022
SubscriberHistoryManager $subscriberHistoryManager,
2123
SubscriberManager $subscriberManager,
2224
BounceManager $bounceManager,
2325
SubscriberRepository $subscriberRepository,
26+
TranslatorInterface $translator,
2427
) {
2528
$this->subscriberHistoryManager = $subscriberHistoryManager;
2629
$this->subscriberManager = $subscriberManager;
2730
$this->bounceManager = $bounceManager;
2831
$this->subscriberRepository = $subscriberRepository;
32+
$this->translator = $translator;
2933
}
3034

3135
public function supports(string $action): bool
@@ -41,8 +45,10 @@ public function handle(array $closureData): void
4145
$this->subscriberRepository->markConfirmed($closureData['userId']);
4246
$this->subscriberHistoryManager->addHistory(
4347
subscriber: $closureData['subscriber'],
44-
message: 'Auto confirmed',
45-
details: 'Subscriber auto confirmed for bounce rule '.$closureData['ruleId']
48+
message: $this->translator->trans('Auto confirmed'),
49+
details: $this->translator->trans('Subscriber auto confirmed for bounce rule %rule_id%', [
50+
'%rule_id%' => $closureData['ruleId']
51+
])
4652
);
4753
}
4854
}

src/Domain/Messaging/Service/Handler/RequeueHandler.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@
1111
use PhpList\Core\Domain\Messaging\Model\Message\MessageStatus;
1212
use Psr\Log\LoggerInterface;
1313
use Symfony\Component\Console\Output\OutputInterface;
14+
use Symfony\Contracts\Translation\TranslatorInterface;
1415

1516
class RequeueHandler
1617
{
1718
public function __construct(
1819
private readonly LoggerInterface $logger,
19-
private readonly EntityManagerInterface $entityManager
20+
private readonly EntityManagerInterface $entityManager,
21+
private readonly TranslatorInterface $translator,
2022
) {
2123
}
2224

@@ -46,9 +48,9 @@ public function handle(Message $campaign, ?OutputInterface $output = null): bool
4648
$campaign->getMetadata()->setStatus(MessageStatus::Submitted);
4749
$this->entityManager->flush();
4850

49-
$output?->writeln(sprintf(
50-
'Requeued campaign; next embargo at %s',
51-
$next->format(DateTime::ATOM)
51+
$output?->writeln($this->translator->trans(
52+
'Requeued campaign; next embargo at %time%',
53+
['%time%' => $next->format(DateTime::ATOM)],
5254
));
5355
$this->logger->info('Campaign requeued with new embargo', [
5456
'campaign_id' => $campaign->getId(),

src/Domain/Messaging/Service/Handler/UnconfirmUserAndDeleteBounceHandler.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,25 @@
77
use PhpList\Core\Domain\Messaging\Service\Manager\BounceManager;
88
use PhpList\Core\Domain\Subscription\Repository\SubscriberRepository;
99
use PhpList\Core\Domain\Subscription\Service\Manager\SubscriberHistoryManager;
10+
use Symfony\Contracts\Translation\TranslatorInterface;
1011

1112
class UnconfirmUserAndDeleteBounceHandler implements BounceActionHandlerInterface
1213
{
1314
private SubscriberHistoryManager $subscriberHistoryManager;
1415
private SubscriberRepository $subscriberRepository;
1516
private BounceManager $bounceManager;
17+
private TranslatorInterface $translator;
1618

1719
public function __construct(
1820
SubscriberHistoryManager $subscriberHistoryManager,
1921
SubscriberRepository $subscriberRepository,
2022
BounceManager $bounceManager,
23+
TranslatorInterface $translator,
2124
) {
2225
$this->subscriberHistoryManager = $subscriberHistoryManager;
2326
$this->subscriberRepository = $subscriberRepository;
2427
$this->bounceManager = $bounceManager;
28+
$this->translator = $translator;
2529
}
2630

2731
public function supports(string $action): bool
@@ -35,8 +39,10 @@ public function handle(array $closureData): void
3539
$this->subscriberRepository->markUnconfirmed($closureData['userId']);
3640
$this->subscriberHistoryManager->addHistory(
3741
subscriber: $closureData['subscriber'],
38-
message: 'Auto unconfirmed',
39-
details: 'Subscriber auto unconfirmed for bounce rule '.$closureData['ruleId']
42+
message: $this->translator->trans('Auto unconfirmed'),
43+
details: $this->translator->trans('Subscriber auto unconfirmed for bounce rule %rule_id%', [
44+
'%rule_id%' => $closureData['ruleId']
45+
])
4046
);
4147
}
4248
$this->bounceManager->delete($closureData['bounce']);

src/Domain/Messaging/Service/Handler/UnconfirmUserHandler.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,22 @@
66

77
use PhpList\Core\Domain\Subscription\Repository\SubscriberRepository;
88
use PhpList\Core\Domain\Subscription\Service\Manager\SubscriberHistoryManager;
9+
use Symfony\Contracts\Translation\TranslatorInterface;
910

1011
class UnconfirmUserHandler implements BounceActionHandlerInterface
1112
{
1213
private SubscriberRepository $subscriberRepository;
1314
private SubscriberHistoryManager $subscriberHistoryManager;
15+
private TranslatorInterface $translator;
1416

1517
public function __construct(
1618
SubscriberRepository $subscriberRepository,
1719
SubscriberHistoryManager $subscriberHistoryManager,
20+
TranslatorInterface $translator,
1821
) {
1922
$this->subscriberRepository = $subscriberRepository;
2023
$this->subscriberHistoryManager = $subscriberHistoryManager;
24+
$this->translator = $translator;
2125
}
2226

2327
public function supports(string $action): bool
@@ -30,9 +34,11 @@ public function handle(array $closureData): void
3034
if (!empty($closureData['subscriber']) && $closureData['confirmed']) {
3135
$this->subscriberRepository->markUnconfirmed($closureData['userId']);
3236
$this->subscriberHistoryManager->addHistory(
33-
$closureData['subscriber'],
34-
'Auto Unconfirmed',
35-
'Subscriber auto unconfirmed for bounce rule '.$closureData['ruleId']
37+
subscriber: $closureData['subscriber'],
38+
message: $this->translator->trans('Auto unconfirmed'),
39+
details: $this->translator->trans('Subscriber auto unconfirmed for bounce rule %rule_id%', [
40+
'%rule_id%' => $closureData['ruleId']
41+
])
3642
);
3743
}
3844
}

0 commit comments

Comments
 (0)