Spaces:
No application file
No application file
File size: 2,809 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
<?php
namespace Mautic\EmailBundle\Model;
use Mautic\CoreBundle\Helper\DateTimeHelper;
use Mautic\EmailBundle\Entity\Stat;
use Mautic\EmailBundle\MonitoredEmail\Search\ContactFinder;
use Mautic\LeadBundle\Entity\DoNotContact as DNC;
use Mautic\LeadBundle\Model\DoNotContact;
class TransportCallback
{
public function __construct(
private DoNotContact $dncModel,
private ContactFinder $finder,
private EmailStatModel $emailStatModel
) {
}
/**
* @param string $hashId
* @param string $comments
* @param int $dncReason
*/
public function addFailureByHashId($hashId, $comments, $dncReason = DNC::BOUNCED): void
{
$result = $this->finder->findByHash($hashId);
if ($contacts = $result->getContacts()) {
$stat = $result->getStat();
$this->updateStatDetails($stat, $comments, $dncReason);
$email = $stat->getEmail();
$channel = ($email) ? ['email' => $email->getId()] : 'email';
foreach ($contacts as $contact) {
$this->dncModel->addDncForContact($contact->getId(), $channel, $dncReason, $comments);
}
}
}
/**
* @param string $address
* @param string $comments
* @param int $dncReason
* @param int|null $channelId
*/
public function addFailureByAddress($address, $comments, $dncReason = DNC::BOUNCED, $channelId = null): void
{
$result = $this->finder->findByAddress($address);
if ($contacts = $result->getContacts()) {
foreach ($contacts as $contact) {
$channel = ($channelId) ? ['email' => $channelId] : 'email';
$this->dncModel->addDncForContact($contact->getId(), $channel, $dncReason, $comments);
}
}
}
/**
* @param int $dncReason
* @param int|null $channelId
*/
public function addFailureByContactId($id, $comments, $dncReason = DNC::BOUNCED, $channelId = null): void
{
$channel = ($channelId) ? ['email' => $channelId] : 'email';
$this->dncModel->addDncForContact($id, $channel, $dncReason, $comments);
}
private function updateStatDetails(Stat $stat, $comments, $dncReason): void
{
if (DNC::BOUNCED === $dncReason) {
$stat->setIsFailed(true);
}
$openDetails = $stat->getOpenDetails();
if (!isset($openDetails['bounces'])) {
$openDetails['bounces'] = [];
}
$dtHelper = new DateTimeHelper();
$openDetails['bounces'][] = [
'datetime' => $dtHelper->toUtcString(),
'reason' => $comments,
];
$stat->setOpenDetails($openDetails);
$this->emailStatModel->saveEntity($stat);
}
}
|