/**
  * Create a new AuditEntry and add a log entry to it if the log is set
  *
  * @param EntityManager $em
  * @param $entity
  * @param $type
  * @param null $field
  * @param null $oldVal
  * @param null $newVal
  */
 protected function createAudit(EntityManager $em, $entity, $type, $field = NULL, $oldVal = NULL, $newVal = NULL)
 {
     $changeDate = new \DateTime("now");
     $audit = new AuditEntry(get_class($entity), $entity->getId(), $type, $changeDate, $field, $oldVal, $newVal);
     if ($this->log) {
         $audit->addLog($this->log);
     }
     $em->persist($audit);
     $em->getUnitOfWork()->computeChangeSet($em->getClassMetadata(get_class($audit)), $audit);
 }
 /**
  * If Auditable entity is newly persisted then add an insert entry into the AuditEntry
  * Mark to be flushed if any audits added
  * @param LifecycleEventArgs $args
  */
 public function postPersist(LifecycleEventArgs $args)
 {
     $entity = $args->getEntity();
     $em = $args->getEntityManager();
     if ($entity instanceof Auditable) {
         $changeDate = new \DateTime("now");
         $audit = new AuditEntry(get_class($entity), $entity->getId(), 'INSERT', $changeDate);
         if ($this->log) {
             $audit->addLog($this->log);
         }
         $em->persist($audit);
         $this->needsFlush = true;
     }
 }
Exemple #3
0
 public function revertAudit(AuditEntry $audit)
 {
     $entity = $this->em->getRepository($audit->getResourceName())->find($audit->getResourceId());
     $getter = 'get' . ucfirst($audit->getFieldName());
     $setter = 'set' . ucfirst($audit->getFieldName());
     $entityValue = $entity->{$getter}();
     if (!is_object($entityValue)) {
         if ($audit->getNewValue() == $entityValue) {
             $entity->{$setter}($audit->getOldValue());
         } else {
             throw EntityInWrongStateException;
         }
     } elseif (!$entityValue instanceof Collection) {
         $oldValue = $this->getEntityRepository($entityValue)->find($audit->getOldValue());
         $newValue = $this->getEntityRepository($entityValue)->find($audit->getNewValue());
         if ($newValue === $entityValue) {
             $entity->{$setter}($oldValue);
         } else {
             throw EntityInWrongStateException;
         }
     } else {
     }
 }