Refactor SubscriberActions:subscribe to return status of confirmation email

We need to pass the error or success info about the confirmation email
in order to be able to be able to display the error message.
[MAILPOET-4736]
This commit is contained in:
Rostislav Wolny
2022-11-29 15:41:23 +01:00
committed by Aschepikov
parent 970db8f0d8
commit ee83e4d748
6 changed files with 23 additions and 16 deletions

View File

@@ -54,7 +54,11 @@ class SubscriberActions {
$this->segmentsRepository = $segmentsRepository;
}
public function subscribe($subscriberData = [], $segmentIds = []): SubscriberEntity {
/**
* Returns SubscriberEntity and associative array with some metadata related to the subscription (e.g. ['confirmationEmailResult' => $exception])
* @return array{0: SubscriberEntity, 1: array{confirmationEmailResult: bool|\Exception}}
*/
public function subscribe($subscriberData = [], $segmentIds = []): array {
// filter out keys from the subscriber_data array
// that should not be editable when subscribing
$subscriberData = $this->subscriberSaveController->filterOutReservedColumns($subscriberData);
@@ -98,14 +102,16 @@ class SubscriberActions {
}
$this->subscribersRepository->flush();
$metaData = ['confirmationEmailResult' => false];
// link subscriber to segments
$segments = $this->segmentsRepository->findBy(['id' => $segmentIds]);
$this->subscriberSegmentRepository->subscribeToSegments($subscriber, $segments);
try {
$this->confirmationEmailMailer->sendConfirmationEmailOnce($subscriber);
$metaData['confirmationEmailResult'] = $this->confirmationEmailMailer->sendConfirmationEmailOnce($subscriber);
} catch (\Exception $e) {
// ignore errors
$metaData['confirmationEmailResult'] = $e;
}
// We want to send the notification on subscribe only when signupConfirmation is disabled
@@ -118,6 +124,6 @@ class SubscriberActions {
);
}
return $subscriber;
return [$subscriber, $metaData];
}
}