<?php
namespace App\EventSubscriber;
use App\Admin\Entity\StdWebUsers;
use App\Event\StdWebUsersNewAddressEvent;
use App\Event\StdWebUsersUpdateAddressEvent;
use App\Event\StdWebUsersActivatedEvent;
use App\API\SavannahBusClient;
use App\Event\StdDeleteUserDataEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Doctrine\ORM\EntityManagerInterface;
class StdWebUsersSubscriber implements EventSubscriberInterface
{
private $entityManager;
private $savannahclient;
public function __construct(EntityManagerInterface $entityManager,SavannahBusClient $client)
{
$this->entityManager=$entityManager;
$this->savannahclient=$client;
}
public static function getSubscribedEvents(): array
{
return [
StdWebUsersActivatedEvent::NAME => 'onActivatedWebuser',
StdWebUsersNewAddressEvent::NAME => 'onNewAddress',
StdWebUsersUpdateAddressEvent::NAME => 'onUpdateAddress',
StdDeleteUserDataEvent::NAME => 'onDeleteUserData',
];
}
public function onNewAddress(StdWebUsersNewAddressEvent $event)
{
$address=$event->getWebUserAddress();
if(getenv("SAVANNAH_BUS_URL")!=""){
$response=$this->savannahclient->newUserAddress($address);
}
}
public function onUpdateAddress(StdWebUsersUpdateAddressEvent $event)
{
$address=$event->getWebUserAddress();
if(getenv("SAVANNAH_BUS_URL")!=""){
$response=$this->savannahclient->updateUserAddress($address);
}
}
public function onActivatedWebuser(StdWebUsersActivatedEvent $event)
{
$webuser=$event->getWebuser();
if(getenv("SAVANNAH_BUS_URL")!=""){
$response=$this->savannahclient->newUser($webuser);
if($response->success){
$webuser->setErpCode($response->code);
}
}
}
public function onDeleteUserData(StdDeleteUserDataEvent $event)
{
$address=$event->getAddress();
// find user to anonimize
$usersToDeleteData=$this->entityManager->getRepository(StdWebUsers::class)->findByEmail($address);
foreach($usersToDeleteData as $user){
$user->setName("xxxxx");
$user->setPhone("");
$user->setMobile("");
$user->setUsername("xxxxx");
$user->setEmail('xxxxx@xxxx.xx');
// anonimize addresses
foreach ($user->getAddresses() as $address) {
$address->setName("xxxxx");
$address->setPhone("");
$address->setMobile("");
$user->addAddress($address);
}
$this->entityManager->persist($user);
}
$this->entityManager->flush();
}
}
?>