<?php
namespace App\Controller;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bridge\Twig\Mime\WrappedTemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mailer\Transport;
use Symfony\Component\Mime\Address;
use Symfony\Component\Mime\Email;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class AbstractFoodsoftController extends AbstractController
{
public const FLASH_SUCCESS = 'success';
public const FLASH_DANGER = 'danger';
public const FLASH_WARNING = 'warning';
public const FLASH_INFO = 'info';
public const FLASH_PRIMARY = 'primary';
public const MONTH_NAMES = [1 => 'OCAK', 'ŞUBAT', 'MART', 'NİSAN', 'MAYIS', 'HAZİRAN', 'TEMMUZ', 'AĞUSTOS', 'EYLÜL', 'EKİM', 'KASIM', 'ARALIK'];
public const DAY_NAMES = ['Pazar', 'Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi'];
public const DAY_NAMES_SHORT = ['Paz', 'Pzt', 'Sal', 'Çar', 'Per', 'Cum', 'Cmt'];
const EPOSTA_HESABI_LOG = '../var/eposta-hesabi.log';
/**
* @var string|null
*/
private $epostaFrom;
/**
* @var string|null
*/
private $epostaFromName;
public function __construct()
{
}
/**
* Adres satırına manuel olarak yazıp menüden olmayan modüllere girişi engeller.
* Config'de menünün pasif olup olmadığını kontrol eder. Pasifse bu adrese manuel olarak girişe de izin vermez.
* @param Request $request
* @return void
*/
public function checkDisabled(Request $request)
{
// Menü pasifse izin verme
$routeName = $request->attributes->get('_route');
$menu = $this->get('twig')->getGlobals();
if (!array_key_exists($routeName, $menu['AnaMenu']['Ana Menü']) ||
(isset($menu['AnaMenu']['Ana Menü'][$routeName]['disabled']) && ($menu['AnaMenu']['Ana Menü'][$routeName]['disabled']))
) {
throw $this->createAccessDeniedException();
}
}
/**
* Eposta gönderme için çoklu hesap tanımlaması yapıldıysa sıradaki hesabın indeksini döndürür
* @return int
*/
protected function getEpostaHesabiIndex(): int
{
if (file_exists(self::EPOSTA_HESABI_LOG)) {
$index = file_get_contents(self::EPOSTA_HESABI_LOG);
return empty($index) ? 0 : (int)$index;
}
return 0;
}
/**
* Eposta gönderme için çoklu hesap tanımlaması yapıldıysa sıradaki hesabın indeksini kaydeder
* @param int $value
* @return void
*/
protected function setEpostaHesabiIndex(int $value): void
{
file_put_contents(self::EPOSTA_HESABI_LOG, (int)$value);
}
/**
* Eposta gönderme için çoklu hesap tanımlaması yapıldıysa sıradaki hesabın DSN'ini döndürür
* @return string
*/
protected function getEpostaHesabiDsn(): string
{
$config = $this->getParameter('foodsoft');
$hesaplar = $config['eposta_hesaplari'] ?? null;
if (empty($hesaplar)) {
return $_ENV['MAILER_DSN'];
}
$index = $this->getEpostaHesabiIndex();
if (!array_key_exists($index, $hesaplar)) {
$index = 0;
}
$hesap = $hesaplar[$index];
$dsn = sprintf('%s://%s:%s@%s:%d?verify_peer=%s',
$hesap['PROTOCOL'],
$hesap['USER'],
$hesap['PASSWORD'],
$hesap['HOST'],
$hesap['PORT'],
$hesap['TLS']
);
$this->epostaFrom = $hesap['FROM'] ?? null;
$this->epostaFromName = $hesap['FROM_NAME'] ?? null;
$this->setEpostaHesabiIndex(++$index);
return $dsn;
}
/**
* Create and returns Mailer for sending email. Uses ENV mail account settings
* @return MailerInterface
*/
public function getMailer(): MailerInterface
{
//$dsn = 'smtp://127.0.0.1:1025';
//$dsn = 'smtp://cemali.kayikci@simgebilisim.com.tr:1Bl9ydP9@mail.simgebilisim.com.tr:587?verify_peer=0';
//$dsn = 'smtp://eventntfr@eventnotifier.net:rJFhlNvjhk@mail.eventnotifier.net:587?verify_peer=0';
// $config = $this->getParameter('foodsoft');
# $dsn = $_ENV['MAILER_DSN'];
$dsn = $this->getEpostaHesabiDsn();
return new Mailer(Transport::fromDsn($dsn));
}
/**
* Sends an HTML templated email
* @param Email $email
* @return void
* @throws TransportExceptionInterface
*/
protected function sendTextEmail(Email $email)
{
$mailer = $this->getMailer();
if (empty($email->getFrom())) {
$from = $this->epostaFrom ?? $_ENV['MAILER_FROM'] ?? 'food-soft@simgebilisim.com.tr';
$fromName = $this->epostaFromName ?? $_ENV['MAILER_FROM_NAME'] ?? 'Foodsoft';
$email->from(new Address($from, $fromName));
}
$mailer->send($email);
}
/**
* Sends an HTML templated email
* @param TemplatedEmail $email
* @return void
* @throws TransportExceptionInterface
*/
protected function sendHtmlEmail(TemplatedEmail $email)
{
$twig = $this->container->get('twig');
$context = $email->getContext();
$context['email'] = new WrappedTemplatedEmail($twig, $email);
$email->html($this->render($email->getHtmlTemplate(), $context)->getContent());
$mailer = $this->getMailer();
if (empty($email->getFrom())) {
$from = $this->epostaFrom ?? $_ENV['MAILER_FROM'] ?? 'food-soft@simgebilisim.com.tr';
$fromName = $this->epostaFromName ?? $_ENV['MAILER_FROM_NAME'] ?? 'Foodsoft';
// dd([$this->epostaFrom, $this->epostaFromName]);
$email->from(new Address($from, $fromName));
}
$mailer->send($email);
}
}