Source of file SendNotificationCommand.php
Size: 5,094 Bytes - Last Modified: 2023-11-16T22:56:03+01:00
/home/websites/teicee/packagist/site/phpdoc/conf/../vendor/teicee/mail-bundle/src/Command/SendNotificationCommand.php
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | <?phpnamespace TIC\MailBundle\Command; use TIC\CoreBundle\Base\TICCommand as BaseCommand; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use TIC\MailBundle\Service\MailerService; /** * Commande de génération et d'envoi de notification par email. */class SendNotificationCommand extends BaseCommand {use \TIC\DormBundle\Traits\ManagerTrait; protected $mailer; /** * DI avec auto-wiring (inutile de définir le "call" sur le service grace à l'attribut @required). * @see https://symfony.com/doc/current/service_container/injection_types.html#setter-injection * @see https://symfony.com/doc/current/service_container/autowiring.html#autowiring-other-methods-e-g-setters-and-public-typed-properties * * @required */public function setMailer(MailerService $mailer): void { $this->mailer = $mailer; } /** * {@inheritdoc} */protected function configure(): void { parent::configure(); $this ->setDescription("Commande de génération et d'envoi de notification par email.") ->addArgument('ref', InputArgument::OPTIONAL, "Référence du modèle de notification à utiliser") ->addOption('to', null, InputOption::VALUE_REQUIRED, "Adresse email du destinataire") ->addOption('data', null, InputOption::VALUE_REQUIRED, "Chaine JSON des données à passer aux templates") ->addOption('locale', null, InputOption::VALUE_REQUIRED, "Langue à utiliser pour générer les messages") ->setHelp("Lancer la commande sans préciser le modèle (ref) affichera la liste des modèles disponibles") ; } /** * {@inheritdoc} */protected function execute(InputInterface $input, OutputInterface $output): int { $ref = $input->getArgument('ref'); if ($ref === null) return $this->listrefs(); $to = $input->getOption('to'); if ($to === null) $to = 'root@localhost'; $data = $input->getOption('data'); if ($data) { if (\strpos($data, '"') === false) $data = \strtr($data, "'", '"'); $data = \json_decode($data, true); } if ($data === null) $data = array(); $locale = $input->getOption('locale'); return $this->sendmail($ref, $to, $data, $locale); } /** * Retourne la liste des modèles de notification disponibles. */protected function listrefs(): int { $rows = array(); foreach ($this->getRepo('Template')->findAll() as $template) { $rows[] = array($template->getRef(), $template->getTarget(), \substr($template->getLabel(), 0, 60)); } $this->io->title("Liste des modèles de notifications disponibles"); $this->io->table(array("Ref", "Target", "Label"), $rows); return self::SUCCESS; } /** * Génère et envoi par email un message de notification. * * @param string $ref Référence du modèle de notification (cf mailer_templates dans parameters.yml) * @param string|array $to Adresses mail des destinataires (chaine avec virgule en séparateur acceptée) * @param array $data Liste clé/valeur pour les substitutions des templates * @param string $locale Spécifie la locale à utiliser pour les templates * @param string|array $pjs Pièces-jointes (chemin ou structure {'name':, 'type':, 'data':}, seul ou en liste) */protected function sendmail(string $ref, mixed $to, array $data = [], string $locale = null, mixed $pjs = []): int { $this->io->section(sprintf("Notification [%s] pour <%s>", $ref, $to)); // Préparation, composition puis envoi d'un message PLAIN et/ou HTML (méthode "combo") # $data['locale'] = $locale;# $nb = $this->mailer->notify($ref, $to, $data, $pjs); // Préparation d'un message à envoyer (instance Symfony Email & environnement Twig) $message = $this->mailer->prepare($ref, $to, $pjs, $locale); if ($message === null) $this->exitError("Failed to prepare Email message:\n" . $this->mailer->getLastError()); // Composition du contenu textuel d'un message (rendu des vues Twig) $rc = $this->mailer->compose($message, $data, $ref); if (! $rc) $this->exitError("Failed to compose Email message:\n" . $this->mailer->getLastError()); // Affichage et debug du message généré if ($this->out->isDebug()) dump($message); elseif ($this->out->isVerbose()) { $charset = $message->getTextCharset(); if ($charset) $this->io->block($message->getTextBody(), null, null, ' | ', false); $charset = $message->getHtmlCharset(); if ($charset) $this->io->block($message->getHtmlBody(), null, null, ' | ', false); } // Envoi un message préparé (sans logs) if (! $this->test) { $rc = $this->mailer->send($message, $ref); if (empty($rc)) $this->exitError("No message sent!"); if ($rc < 0) $this->exitError("Failed to send Email message:\n" . $this->mailer->getLastError(), \abs($rc)); $this->io->success("Done: $rc message(s) successfully sent."); } return self::SUCCESS; } } |