mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-22 01:49:05 +02:00
Added some simple time travel mechanism for part view.
In the moment it is not possible to show elements that were deleted.
This commit is contained in:
parent
a9fd1f9c68
commit
464a487a17
15 changed files with 450 additions and 27 deletions
|
@ -31,15 +31,19 @@ use Doctrine\Common\EventSubscriber;
|
|||
use Doctrine\ORM\Event\OnFlushEventArgs;
|
||||
use Doctrine\ORM\Event\PostFlushEventArgs;
|
||||
use Doctrine\ORM\Events;
|
||||
use Doctrine\ORM\UnitOfWork;
|
||||
use Doctrine\Persistence\Event\LifecycleEventArgs;
|
||||
use Symfony\Component\Serializer\SerializerInterface;
|
||||
|
||||
class EventLoggerSubscriber implements EventSubscriber
|
||||
{
|
||||
protected $logger;
|
||||
protected $serializer;
|
||||
|
||||
public function __construct(EventLogger $logger)
|
||||
public function __construct(EventLogger $logger, SerializerInterface $serializer)
|
||||
{
|
||||
$this->logger = $logger;
|
||||
$this->serializer = $serializer;
|
||||
}
|
||||
|
||||
public function onFlush(OnFlushEventArgs $eventArgs)
|
||||
|
@ -55,6 +59,7 @@ class EventLoggerSubscriber implements EventSubscriber
|
|||
foreach ($uow->getScheduledEntityUpdates() as $entity) {
|
||||
if ($this->validEntity($entity)) {
|
||||
$log = new ElementEditedLogEntry($entity);
|
||||
$this->saveChangeSet($entity, $log, $uow);
|
||||
$this->logger->log($log);
|
||||
}
|
||||
}
|
||||
|
@ -62,6 +67,7 @@ class EventLoggerSubscriber implements EventSubscriber
|
|||
foreach ($uow->getScheduledEntityDeletions() as $entity) {
|
||||
if ($this->validEntity($entity)) {
|
||||
$log = new ElementDeletedLogEntry($entity);
|
||||
$this->saveChangeSet($entity, $log, $uow);
|
||||
$this->logger->log($log);
|
||||
}
|
||||
}
|
||||
|
@ -70,6 +76,18 @@ class EventLoggerSubscriber implements EventSubscriber
|
|||
$uow->computeChangeSets();
|
||||
}
|
||||
|
||||
protected function saveChangeSet(AbstractDBElement $entity, AbstractLogEntry $logEntry, UnitOfWork $uow): void
|
||||
{
|
||||
if (!$logEntry instanceof ElementEditedLogEntry && !$logEntry instanceof ElementDeletedLogEntry) {
|
||||
throw new \InvalidArgumentException('$logEntry must be ElementEditedLogEntry or ElementDeletedLogEntry!');
|
||||
}
|
||||
|
||||
$changeSet = $uow->getEntityChangeSet($entity);
|
||||
dump($changeSet);
|
||||
$old_data = array_diff(array_combine(array_keys($changeSet), array_column($changeSet, 0)), [null]);
|
||||
$logEntry->setOldData($old_data);
|
||||
}
|
||||
|
||||
public function postPersist(LifecycleEventArgs $args)
|
||||
{
|
||||
//Create an log entry
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue