first commit symfony 6
This commit is contained in:
@ -5,15 +5,32 @@ namespace App\EventListener;
|
||||
use Doctrine\Bundle\DoctrineBundle\EventSubscriber\EventSubscriberInterface;
|
||||
use Doctrine\ORM\Events;
|
||||
use Doctrine\Persistence\Event\LifecycleEventArgs;
|
||||
use Doctrine\ORM\Event\OnFlushEventArgs;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
|
||||
use Doctrine\ORM\Proxy\Proxy;
|
||||
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||
|
||||
use App\Entity\Audit as Audit;
|
||||
|
||||
class AllSubscriber implements EventSubscriberInterface
|
||||
{
|
||||
private $entity;
|
||||
private $token;
|
||||
private $params;
|
||||
|
||||
public function __construct(EntityManagerInterface $em, TokenStorageInterface $token,ParameterBagInterface $params)
|
||||
{
|
||||
$this->em = $em;
|
||||
$this->token = $token;
|
||||
$this->params = $params;
|
||||
}
|
||||
|
||||
public function getSubscribedEvents(): array
|
||||
{
|
||||
return [
|
||||
Events::preRemove,
|
||||
Events::onFlush,
|
||||
];
|
||||
}
|
||||
|
||||
@ -25,4 +42,156 @@ class AllSubscriber implements EventSubscriberInterface
|
||||
if($this->entity->getId()<0)
|
||||
throw new \Exception("Impossible de supprimer cet enregistrement. C'est un enregistrement système");
|
||||
}
|
||||
|
||||
public function onFlush(OnFlushEventArgs $eventArgs): void
|
||||
{
|
||||
$this->entity = $eventArgs->getEntityManager();
|
||||
|
||||
if ($this->entity instanceof Audit||!$this->params->get("auditUse")) return;
|
||||
$this->audit();
|
||||
}
|
||||
|
||||
private function audit() {
|
||||
$token = $this->token->getToken();
|
||||
if(!$token)$user="job";
|
||||
else {
|
||||
$user=$token->getUser();
|
||||
if($user!="anon.") $user = $user->getUsername();
|
||||
else $user="job";
|
||||
}
|
||||
|
||||
$uow = $this->em->getUnitOfWork();
|
||||
$uow->computeChangeSets();
|
||||
|
||||
foreach ($uow->getScheduledEntityInsertions() as $entity) {
|
||||
$metaCar = $this->em->getClassMetadata(get_class($entity));
|
||||
$className=str_replace("App\\Entity\\","",$metaCar->getName());
|
||||
|
||||
$nameold="";
|
||||
if($metaCar->hasField("name"))
|
||||
$nameold=" = ".$entity>getName();
|
||||
elseif($metaCar->hasField("label"))
|
||||
$nameold=" = ".$entity->getLabel();
|
||||
elseif($metaCar->hasField("username"))
|
||||
$nameold=" = ".$entity->getUsername();
|
||||
|
||||
$audit=new Audit();
|
||||
$audit->setDatesubmit(new \DateTime("now"));
|
||||
$audit->setEntityname($className);
|
||||
$audit->setEntityid($entity->getId());
|
||||
$audit->setUsername($user);
|
||||
$audit->setDescription("SUBMIT");
|
||||
$audit->setDetail(["id"=>$entity->getId().$nameold]);
|
||||
|
||||
$this->em->persist($audit);
|
||||
$uow->computeChangeSet($this->em->getClassMetadata(get_class($audit)), $audit);
|
||||
}
|
||||
|
||||
foreach ($uow->getScheduledEntityDeletions() as $entity) {
|
||||
$metaCar = $this->em->getClassMetadata(get_class($entity));
|
||||
$className=str_replace("App\\Entity\\","",$metaCar->getName());
|
||||
|
||||
$nameold="";
|
||||
if($metaCar->hasField("name"))
|
||||
$nameold=" = ".$entity>getName();
|
||||
elseif($metaCar->hasField("label"))
|
||||
$nameold=" = ".$entity->getLabel();
|
||||
elseif($metaCar->hasField("username"))
|
||||
$nameold=" = ".$entity->getUsername();
|
||||
|
||||
$audit=new Audit();
|
||||
$audit->setDatesubmit(new \DateTime("now"));
|
||||
$audit->setEntityname($className);
|
||||
$audit->setEntityid($entity->getId());
|
||||
$audit->setUsername($user);
|
||||
$audit->setDescription("DELETE");
|
||||
$audit->setDetail(["id"=>$entity->getId().$nameold]);
|
||||
|
||||
$this->em->persist($audit);
|
||||
$uow->computeChangeSet($this->em->getClassMetadata(get_class($audit)), $audit);
|
||||
}
|
||||
|
||||
foreach ($uow->getScheduledEntityUpdates() as $entity) {
|
||||
$changeSet = $uow->getEntityChangeSet($entity);
|
||||
|
||||
// Unaudit field
|
||||
$className = str_replace("App\\Entity\\","",$this->em->getClassMetadata(get_class($entity))->getName());
|
||||
switch($className) {
|
||||
case "Audit":
|
||||
$changeSet=null;
|
||||
break;
|
||||
|
||||
case "User":
|
||||
unset($changeSet["visitecpt"]);
|
||||
unset($changeSet["visitedate"]);
|
||||
unset($changeSet["preference"]);
|
||||
unset($changeSet["keyvalue"]);
|
||||
unset($changeSet["keyexpire"]);
|
||||
unset($changeSet["apikey"]);
|
||||
unset($changeSet["password"]);
|
||||
unset($changeSet["passwordplain"]);
|
||||
unset($changeSet["salt"]);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
unset($changeSet["apikey"]);
|
||||
break;
|
||||
}
|
||||
|
||||
if ($changeSet) {
|
||||
$mychange=[];
|
||||
foreach($changeSet as $key => $value) {
|
||||
// Le champs modifié est-il une entité
|
||||
$isentity0=($value[0]&&is_object($value[0])&&get_class($value[0])&&get_class($value[0])!="DateTime");
|
||||
$isentity1=($value[1]&&is_object($value[1])&&get_class($value[1])&&get_class($value[1])!="DateTime");
|
||||
|
||||
if($isentity0||$isentity1) {
|
||||
$nameold="";
|
||||
if($isentity0) {
|
||||
$metaCar = $this->em->getClassMetadata(get_class($value[0]));
|
||||
if($metaCar->hasField("name"))
|
||||
$nameold=" = ".$value[0]->getName();
|
||||
elseif($metaCar->hasField("label"))
|
||||
$nameold=" = ".$value[0]->getLabel();
|
||||
elseif($metaCar->hasField("username"))
|
||||
$nameold=" = ".$value[0]->getUsername();
|
||||
|
||||
$nameold= $value[0]->getId().$nameold;
|
||||
}
|
||||
|
||||
|
||||
$namenew="";
|
||||
if($isentity1) {
|
||||
$metaCar = $this->em->getClassMetadata(get_class($value[1]));
|
||||
if($metaCar->hasField("name"))
|
||||
$namenew=" = ".$value[1]->getName();
|
||||
elseif($metaCar->hasField("label"))
|
||||
$namenew=" = ".$value[1]->getLabel();
|
||||
elseif($metaCar->hasField("username"))
|
||||
$namenew=" = ".$value[1]->getUsername();
|
||||
|
||||
$namenew= $value[1]->getId().$namenew;
|
||||
}
|
||||
|
||||
$mychange[$key]=[$nameold,$namenew];
|
||||
}
|
||||
else $mychange[$key]=$value;
|
||||
|
||||
}
|
||||
$audit=new Audit();
|
||||
$audit->setDatesubmit(new \DateTime("now"));
|
||||
$audit->setEntityname($className);
|
||||
$audit->setEntityid($entity->getId());
|
||||
$audit->setUsername($user);
|
||||
$audit->setDescription("UPDATE");
|
||||
$audit->setDetail($mychange);
|
||||
|
||||
$this->em->persist($audit);
|
||||
$uow->computeChangeSet($this->em->getClassMetadata(get_class($audit)), $audit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -117,8 +117,10 @@ class GroupSubscriber implements EventSubscriberInterface
|
||||
// Le propriétaire passe manager
|
||||
$usergroups=$this->em->getRepository("App\Entity\UserGroup")->findBy(["group"=>$group,"rolegroup"=>"100"]);
|
||||
foreach($usergroups as $usergroup) {
|
||||
$usergroup->setRolegroup(90);
|
||||
$this->em->flush();
|
||||
if($usergroup->getUser()!=$group->getOwner()) {
|
||||
$usergroup->setRolegroup(90);
|
||||
$this->em->flush();
|
||||
}
|
||||
}
|
||||
|
||||
// Le propriétaire prend son role dans le groupe
|
||||
@ -129,10 +131,14 @@ class GroupSubscriber implements EventSubscriberInterface
|
||||
$usergroup->setUser($group->getOwner());
|
||||
$usergroup->setGroup($group);
|
||||
$usergroup->setApikey(Uuid::uuid4());
|
||||
$usergroup->setRolegroup(100);
|
||||
$this->em->persist($usergroup);
|
||||
$this->em->flush();
|
||||
}
|
||||
elseif($usergroup->getRolegroup()!=100) {
|
||||
$usergroup->setRolegroup(100);
|
||||
$this->em->flush();
|
||||
}
|
||||
$usergroup->setRolegroup(100);
|
||||
$this->em->persist($usergroup);
|
||||
$this->em->flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user