/** * Genera un registro de auditoría con un detalle de los cambios realizados a la entidad. * * @param LifecycleEventArgs $eventArgs */ public function logChangeSet(LifecycleEventArgs $eventArgs, $action) { $em = $eventArgs->getEntityManager(); $uow = $em->getUnitOfWork(); $entity = $eventArgs->getEntity(); $classMetadata = $em->getClassMetadata(get_class($entity)); $user = $this->container->get('security.token_storage')->getToken()->getUser(); if ($this->isEntitySupported($classMetadata->reflClass)) { $uow->computeChangeSet($classMetadata, $entity); $changeSet = $uow->getEntityChangeSet($entity); $this->WriteToLog($action, $entity, $user, $changeSet); $Registro = new \Tapir\BaseBundle\Entity\AuditoriaRegistro(); $Registro->setAccion($action); $Registro->setElementoTipo($classMetadata->reflClass->getName()); $Registro->setElementoId($entity->getId()); $Registro->setEstacion($this->container->get('request')->getClientIp()); if (\Tapir\BaseBundle\Helper\ClassHelper::UsaTrait($user, 'Tapir\\BaseBundle\\Entity\\ConIdMetodos')) { // Algunas veces el usuario no tiene ID (por ejemplo en el entorno de pruebas unitarias) $Registro->setUsuario($user->getId()); } //echo '<pre>' . json_encode($changeSet, JSON_PRETTY_PRINT) . '</pre>'; $Registro->setCambios(json_encode($changeSet)); $em->persist($Registro); $em->flush(); //$em->clear(); //$RegistroMeta = $em->getClassMetadata(get_class($Registro)); //$uow->computeChangeSet($RegistroMeta, $Registro); } }
/** * Genera un registro de auditoría con un detalle de los cambios realizados a la entidad. * * @param LifecycleEventArgs $eventArgs */ public function WriteToLogTable($em, $action, $entity, $user, $changeSet = null) { $uow = $em->getUnitOfWork(); $Registro = new \Tapir\BaseBundle\Entity\AuditoriaRegistro(); $Registro->setAccion($action); $Registro->setElementoTipo(str_replace('Proxies\\__CG__\\', '', get_class($entity))); $Registro->setElementoId($entity->getId()); if ($Request = $this->container->get('request_stack')->getCurrentRequest()) { // A veces no hay request, por ejemplo al correr servicios desde la línea de comandos $Registro->setEstacion($Request->getClientIp()); } if (\Tapir\BaseBundle\Helper\ClassHelper::UsaTrait($user, 'Tapir\\BaseBundle\\Entity\\ConIdMetodos')) { // A veces el usuario no tiene ID (por ejemplo en el entorno de pruebas unitarias) $Registro->setUsuario($user); } $Registro->setCambios(json_encode($changeSet)); $em->persist($Registro); $this->InsercionesSinId[] = $Registro; $cambioMetadata = $em->getClassMetadata(get_class($Registro)); $uow->computeChangeSet($cambioMetadata, $Registro); }