src\Controller\AbstractFoodsoftController.php line 47

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  4. use Symfony\Bridge\Twig\Mime\WrappedTemplatedEmail;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  8. use Symfony\Component\Mailer\MailerInterface;
  9. use Symfony\Component\Mailer\Mailer;
  10. use Symfony\Component\Mailer\Transport;
  11. use Symfony\Component\Mime\Address;
  12. use Symfony\Component\Mime\Email;
  13. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  14. class AbstractFoodsoftController extends AbstractController
  15. {
  16.     public const FLASH_SUCCESS 'success';
  17.     public const FLASH_DANGER 'danger';
  18.     public const FLASH_WARNING 'warning';
  19.     public const FLASH_INFO 'info';
  20.     public const FLASH_PRIMARY 'primary';
  21.     public const MONTH_NAMES = [=> 'OCAK''ŞUBAT''MART''NİSAN''MAYIS''HAZİRAN''TEMMUZ''AĞUSTOS''EYLÜL''EKİM''KASIM''ARALIK'];
  22.     public const DAY_NAMES = ['Pazar''Pazartesi''Salı''Çarşamba''Perşembe''Cuma''Cumartesi'];
  23.     public const DAY_NAMES_SHORT = ['Paz''Pzt''Sal''Çar''Per''Cum''Cmt'];
  24.     const EPOSTA_HESABI_LOG '../var/eposta-hesabi.log';
  25.     /**
  26.      * @var string|null
  27.      */
  28.     private $epostaFrom;
  29.     /**
  30.      * @var string|null
  31.      */
  32.     private $epostaFromName;
  33.     public function __construct()
  34.     {
  35.     }
  36.     /**
  37.      * Adres satırına manuel olarak yazıp menüden olmayan modüllere girişi engeller.
  38.      * Config'de menünün pasif olup olmadığını kontrol eder. Pasifse bu adrese manuel olarak girişe de izin vermez.
  39.      * @param Request $request
  40.      * @return void
  41.      */
  42.     public function checkDisabled(Request $request)
  43.     {
  44.         // Menü pasifse izin verme
  45.         $routeName $request->attributes->get('_route');
  46.         $menu $this->get('twig')->getGlobals();
  47.         if (!array_key_exists($routeName$menu['AnaMenu']['Ana Menü']) ||
  48.             (isset($menu['AnaMenu']['Ana Menü'][$routeName]['disabled']) && ($menu['AnaMenu']['Ana Menü'][$routeName]['disabled']))
  49.         ) {
  50.             throw $this->createAccessDeniedException();
  51.         }
  52.     }
  53.     /**
  54.      * Eposta gönderme için çoklu hesap tanımlaması yapıldıysa sıradaki hesabın indeksini döndürür
  55.      * @return int
  56.      */
  57.     protected function getEpostaHesabiIndex(): int
  58.     {
  59.         if (file_exists(self::EPOSTA_HESABI_LOG)) {
  60.             $index file_get_contents(self::EPOSTA_HESABI_LOG);
  61.             return empty($index) ? : (int)$index;
  62.         }
  63.         return 0;
  64.     }
  65.     /**
  66.      * Eposta gönderme için çoklu hesap tanımlaması yapıldıysa sıradaki hesabın indeksini kaydeder
  67.      * @param int $value
  68.      * @return void
  69.      */
  70.     protected function setEpostaHesabiIndex(int $value): void
  71.     {
  72.         file_put_contents(self::EPOSTA_HESABI_LOG, (int)$value);
  73.     }
  74.     /**
  75.      * Eposta gönderme için çoklu hesap tanımlaması yapıldıysa sıradaki hesabın DSN'ini döndürür
  76.      * @return string
  77.      */
  78.     protected function getEpostaHesabiDsn(): string
  79.     {
  80.         $config $this->getParameter('foodsoft');
  81.         $hesaplar $config['eposta_hesaplari'] ?? null;
  82.         if (empty($hesaplar)) {
  83.             return $_ENV['MAILER_DSN'];
  84.         }
  85.         $index $this->getEpostaHesabiIndex();
  86.         if (!array_key_exists($index$hesaplar)) {
  87.             $index 0;
  88.         }
  89.         $hesap $hesaplar[$index];
  90.         $dsn sprintf('%s://%s:%s@%s:%d?verify_peer=%s',
  91.             $hesap['PROTOCOL'],
  92.             $hesap['USER'],
  93.             $hesap['PASSWORD'],
  94.             $hesap['HOST'],
  95.             $hesap['PORT'],
  96.             $hesap['TLS']
  97.         );
  98.         $this->epostaFrom $hesap['FROM'] ?? null;
  99.         $this->epostaFromName $hesap['FROM_NAME'] ?? null;
  100.         $this->setEpostaHesabiIndex(++$index);
  101.         return $dsn;
  102.     }
  103.     /**
  104.      * Create and returns Mailer for sending email. Uses ENV mail account settings
  105.      * @return MailerInterface
  106.      */
  107.     public function getMailer(): MailerInterface
  108.     {
  109.         //$dsn = 'smtp://127.0.0.1:1025';
  110.         //$dsn = 'smtp://cemali.kayikci@simgebilisim.com.tr:1Bl9ydP9@mail.simgebilisim.com.tr:587?verify_peer=0';
  111.         //$dsn = 'smtp://eventntfr@eventnotifier.net:rJFhlNvjhk@mail.eventnotifier.net:587?verify_peer=0';
  112.         // $config = $this->getParameter('foodsoft');
  113.         # $dsn = $_ENV['MAILER_DSN'];
  114.         $dsn $this->getEpostaHesabiDsn();
  115.         return new Mailer(Transport::fromDsn($dsn));
  116.     }
  117.     /**
  118.      * Sends an HTML templated email
  119.      * @param Email $email
  120.      * @return void
  121.      * @throws TransportExceptionInterface
  122.      */
  123.     protected function sendTextEmail(Email $email)
  124.     {
  125.         $mailer $this->getMailer();
  126.         if (empty($email->getFrom())) {
  127.             $from $this->epostaFrom ?? $_ENV['MAILER_FROM'] ?? 'food-soft@simgebilisim.com.tr';
  128.             $fromName $this->epostaFromName ?? $_ENV['MAILER_FROM_NAME'] ?? 'Foodsoft';
  129.             $email->from(new Address($from$fromName));
  130.         }
  131.         $mailer->send($email);
  132.     }
  133.     /**
  134.      * Sends an HTML templated email
  135.      * @param TemplatedEmail $email
  136.      * @return void
  137.      * @throws TransportExceptionInterface
  138.      */
  139.     protected function sendHtmlEmail(TemplatedEmail $email)
  140.     {
  141.         $twig $this->container->get('twig');
  142.         $context $email->getContext();
  143.         $context['email'] = new WrappedTemplatedEmail($twig$email);
  144.         $email->html($this->render($email->getHtmlTemplate(), $context)->getContent());
  145.         $mailer $this->getMailer();
  146.         if (empty($email->getFrom())) {
  147.             $from $this->epostaFrom ?? $_ENV['MAILER_FROM'] ?? 'food-soft@simgebilisim.com.tr';
  148.             $fromName $this->epostaFromName ?? $_ENV['MAILER_FROM_NAME'] ?? 'Foodsoft';
  149. //            dd([$this->epostaFrom, $this->epostaFromName]);
  150.             $email->from(new Address($from$fromName));
  151.         }
  152.         $mailer->send($email);
  153.     }
  154. }