friendship ended with social-app. php is my new best friend
at main 1.6 kB view raw
1<?php declare(strict_types = 1); 2 3namespace Contributte\Logging; 4 5use Contributte\Logging\Mailer\IMailer; 6use Nette\InvalidArgumentException; 7 8class SendMailLogger extends AbstractLogger 9{ 10 11 /** @var string */ 12 private $emailSnooze = '2 days'; 13 14 /** @var IMailer */ 15 private $mailer; 16 17 /** @var string[] */ 18 private $allowedPriority = [ILogger::ERROR, ILogger::EXCEPTION, ILogger::CRITICAL]; 19 20 public function __construct(IMailer $mailer, string $directory) 21 { 22 parent::__construct($directory); 23 $this->mailer = $mailer; 24 } 25 26 /** 27 * @param string[] $allowedPriority 28 */ 29 public function setAllowedPriority(array $allowedPriority): void 30 { 31 $this->allowedPriority = $allowedPriority; 32 } 33 34 public function setEmailSnooze(string $emailSnooze): void 35 { 36 $this->emailSnooze = $emailSnooze; 37 } 38 39 public function setMailer(IMailer $mailer): void 40 { 41 $this->mailer = $mailer; 42 } 43 44 /** 45 * @param mixed $message 46 */ 47 public function log($message, string $priority = ILogger::INFO): void 48 { 49 if (!in_array($priority, $this->allowedPriority, true)) { 50 return; 51 } 52 53 if (is_numeric($this->emailSnooze)) { 54 $snooze = (int) $this->emailSnooze; 55 } else { 56 $strtotime = @strtotime($this->emailSnooze); 57 58 if ($strtotime === false) { 59 throw new InvalidArgumentException('Email snooze was not parsed'); 60 } 61 62 $snooze = $strtotime - time(); 63 } 64 65 $filemtime = @filemtime($this->directory . '/email-sent'); 66 67 if ($filemtime === false) { 68 $filemtime = 0; 69 } 70 71 if ($filemtime + $snooze < time() && (bool) @file_put_contents($this->directory . '/email-sent', 'sent') 72 ) { 73 $this->mailer->send($message); 74 } 75 } 76 77}