<?php
namespace App\EventSubscriber;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Http\SecurityEvents;
class LoginSubscriber implements EventSubscriberInterface
{
/** @var ContainerInterface */
private $container;
/**@var EntityManagerInterface */
private $em;
/**
* @param EntityManagerInterface $em
*/
public function __construct(EntityManagerInterface $em, ContainerInterface $container)
{
$this->em = $em;
$this->container = $container;
}
/**
* @return array
*/
public static function getSubscribedEvents(): array
{
return [
SecurityEvents::INTERACTIVE_LOGIN => ['onSecurityInteractiveLogin'],
];
}
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event): void
{
$user = $event->getAuthenticationToken()->getUser();
if ($user instanceof User) {
// Oturum açan kullanıcının firmasına ait alt firmalar varsa bunları da listeye ekle
$conn = $this->em->getConnection();
$sql = 'SELECT FIRMAKODU, FIRMAADI, UNVAN2 FROM CARI_KART
WHERE (ANAFIRMAKODU = :CARIKODU) or (FIRMAKODU = :CARIKODU)
ORDER BY FIRMAKODU';
$stmt = $conn->prepare($sql);
$data = $stmt->executeQuery([':CARIKODU' => $user->getCari()->getFirmaKodu()])->fetchAllAssociative();
$firmalar = [];
$config = $this->container->getParameter('foodsoft');
foreach ($data as $alt) {
$firmalar[$alt['FIRMAKODU']] = $alt;
if(array_key_exists('alt_firma_goster', $config) && !$config['alt_firma_goster'])
break;
}
$_SESSION['_sf2_attributes']['AltFirmalar'] = $firmalar;
$user->getCari()->setAktifFirma(count($firmalar) > 0 ? $data[0]['FIRMAKODU'] : '');
}
}
}