logger = $logger; $this->twig = $twig; $this->mailer = $mailer; //$this->forcedMailer = new \Swift_Mailer($mailerTransporter); $this->router = $router; $this->translator = $translator; $this->routeParameters = $routeParameters; } /** * @param $template * * @throws \Twig\Error\LoaderError * @throws \Twig\Error\RuntimeError * @throws \Twig\Error\SyntaxError * * @return string */ public function renderContentToUser(User $to, $template, array $parameters = []) { $context = $this->router->getContext(); $previousHost = $context->getHost(); $previousScheme = $context->getScheme(); $context->setHost($this->routeParameters['host']); $context->setScheme($this->routeParameters['scheme']); $content = $this->twig->render($template, $parameters); // reset the host $context->setHost($previousHost); $context->setScheme($previousScheme); return $content; } /** * @param $force * * @throws \Symfony\Component\Mailer\Exception\TransportExceptionInterface */ public function sendMessage(Swift_Message $message, $force) { if ($force) { $this->forcedMailer->send($message); } else { $this->mailer->send($message); } } /** * Envoie une notification à un utilisateur. * * @param array $subject Subject of the message [ 0 => $message (required), 1 => $parameters (optional), 3 => $domain (optional) ] * @param array $bodies The bodies. An array where keys are the contentType and values the bodies * @param callable $callback a callback to customize the message (add attachment, etc.) * @param mixed $recipient * @param mixed $force */ public function sendNotification( $recipient, array $subject, array $bodies, ?callable $callback = null, $force = false ) { $fromEmail = $this->routeParameters['from_email']; $fromName = $this->routeParameters['from_name']; $to = $recipient instanceof User ? $recipient->getEmail() : $recipient; $subjectI18n = $this->translator->trans( $subject[0], $subject[1] ?? [], $subject[2] ?? null ); $message = (new Swift_Message($subjectI18n)) ->setFrom($fromEmail, $fromName) ->setTo($to); foreach ($bodies as $contentType => $content) { $message->setBody($content, $contentType); } if (null !== $callback) { call_user_func($callback, $message); } $this->logger->info('[notification] Sending notification', [ 'to' => $message->getTo(), 'subject' => $message->getSubject(), ]); $this->sendMessage($message, $force); } }