Spaces:
No application file
No application file
| namespace Mautic\CampaignBundle\Executioner\Helper; | |
| use Mautic\CampaignBundle\Entity\Event; | |
| use Mautic\CoreBundle\Helper\CoreParametersHelper; | |
| use Mautic\CoreBundle\Model\NotificationModel; | |
| use Mautic\LeadBundle\Entity\Lead; | |
| use Mautic\UserBundle\Entity\User; | |
| use Mautic\UserBundle\Model\UserModel; | |
| use Symfony\Component\Routing\Generator\UrlGeneratorInterface; | |
| use Symfony\Component\Routing\Router; | |
| use Symfony\Contracts\Translation\TranslatorInterface; | |
| class NotificationHelper | |
| { | |
| public function __construct( | |
| private UserModel $userModel, | |
| private NotificationModel $notificationModel, | |
| private TranslatorInterface $translator, | |
| private Router $router, | |
| private CoreParametersHelper $coreParametersHelper | |
| ) { | |
| } | |
| public function notifyOfFailure(Lead $contact, Event $event): void | |
| { | |
| $user = $this->getUser($contact, $event); | |
| if (!$user || !$user->getId()) { | |
| return; | |
| } | |
| $this->notificationModel->addNotification( | |
| $event->getCampaign()->getName().' / '.$event->getName(), | |
| 'error', | |
| false, | |
| $this->translator->trans( | |
| 'mautic.campaign.event.failed', | |
| [ | |
| '%contact%' => '<a href="'.$this->router->generate( | |
| 'mautic_contact_action', | |
| ['objectAction' => 'view', 'objectId' => $contact->getId()] | |
| ).'" data-toggle="ajax">'.$contact->getPrimaryIdentifier().'</a>', | |
| ] | |
| ), | |
| null, | |
| null, | |
| $user | |
| ); | |
| } | |
| public function notifyOfUnpublish(Event $event): void | |
| { | |
| /** | |
| * Pass a fake lead so we can just get the campaign creator. | |
| */ | |
| $user = $this->getUser(new Lead(), $event); | |
| if (!$user || !$user->getId()) { | |
| return; | |
| } | |
| $campaign = $event->getCampaign(); | |
| $this->notificationModel->addNotification( | |
| $campaign->getName().' / '.$event->getName(), | |
| 'error', | |
| false, | |
| $this->translator->trans( | |
| 'mautic.campaign.event.failed.campaign.unpublished', | |
| [ | |
| '%campaign%' => '<a href="'.$this->router->generate( | |
| 'mautic_campaign_action', | |
| [ | |
| 'objectAction' => 'view', | |
| 'objectId' => $campaign->getId(), | |
| ], | |
| UrlGeneratorInterface::ABSOLUTE_URL | |
| ).'" data-toggle="ajax">'.$campaign->getName().'</a>', | |
| '%event%' => $event->getName(), | |
| ] | |
| ), | |
| null, | |
| null, | |
| $user | |
| ); | |
| $subject = $this->translator->trans( | |
| 'mautic.campaign.event.campaign_unpublished.title', | |
| [ | |
| '%title%' => $campaign->getName(), | |
| ] | |
| ); | |
| $content = $this->translator->trans( | |
| 'mautic.campaign.event.failed.campaign.unpublished', | |
| [ | |
| '%campaign%' => '<a href="'.$this->router->generate( | |
| 'mautic_campaign_action', | |
| [ | |
| 'objectAction' => 'view', | |
| 'objectId' => $campaign->getId(), | |
| ], | |
| UrlGeneratorInterface::ABSOLUTE_URL | |
| ).'" data-toggle="ajax">'.$campaign->getName().'</a>', | |
| '%event%' => $event->getName(), | |
| ] | |
| ); | |
| $sendToAuthor = $this->coreParametersHelper->get('campaign_send_notification_to_author', 1); | |
| if ($sendToAuthor) { | |
| $this->userModel->emailUser($user, $subject, $content); | |
| } else { | |
| $emailAddresses = array_map('trim', explode(',', $this->coreParametersHelper->get('campaign_notification_email_addresses'))); | |
| $this->userModel->sendMailToEmailAddresses($emailAddresses, $subject, $content); | |
| } | |
| } | |
| /** | |
| * @return User|null | |
| */ | |
| private function getUser(Lead $contact, Event $event) | |
| { | |
| // Default is to notify the contact owner | |
| if ($owner = $contact->getOwner()) { | |
| return $owner; | |
| } | |
| // If the contact doesn't have an owner, notify the one that created the campaign | |
| if ($campaignCreator = $event->getCampaign()->getCreatedBy()) { | |
| if ($owner = $this->userModel->getEntity($campaignCreator)) { | |
| return $owner; | |
| } | |
| } | |
| // If all else fails, notifiy a system admins | |
| return $this->userModel->getSystemAdministrator(); | |
| } | |
| } | |