Source of file BlameableSubscriber.php
Size: 2,264 Bytes - Last Modified: 2023-11-16T22:56:02+01:00
/home/websites/teicee/packagist/site/phpdoc/conf/../vendor/teicee/dorm-bundle/src/EventSubscriber/BlameableSubscriber.php
| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 | <?phpnamespace TIC\DormBundle\EventSubscriber; use Doctrine\ORM\Event\PrePersistEventArgs; use Doctrine\ORM\Event\PreUpdateEventArgs; use Doctrine\ORM\Events; use Doctrine\Bundle\DoctrineBundle\EventSubscriber\EventSubscriberInterface; use http\Exception\InvalidArgumentException; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use TIC\CoreBundle\Util\ClassHelper; use TIC\DormBundle\Traits\EntityBlameable; class BlameableSubscriber implements EventSubscriberInterface {private $tokenStorage; public function __construct(TokenStorageInterface $tokenStorage) { $this->tokenStorage = $tokenStorage; } public function getSubscribedEvents(): array { return [ Events::prePersist, Events::preUpdate, ]; } public function prePersist(PrePersistEventArgs $args): void { $object = $args->getObject(); if (!$this->isBlameable($object)) return; $user = $this->checkUser(); if ($user && is_object($object)) { $object->setCreatedBy($user); $object->setUpdatedBy($user); } } public function preUpdate(PreUpdateEventArgs $args): void { $object = $args->getObject(); if (!$this->isBlameable($object)) return; $user = $this->checkUser(); if ($user && is_object($object)) { $object->setUpdatedBy($user); } } public function isBlameable($object): bool { return ClassHelper::hasTrait($object, EntityBlameable::class); } public function checkUser() { $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null; if ($user === null) { $user = (PHP_SAPI === "cli") ? 'admin' : 'anonymous'; } if (is_object($user)) { if (method_exists($user, 'getBlameableName')) { return $user->getBlameableName(); } if (method_exists($user, '__toString')) { return $user->__toString(); } throw new InvalidArgumentException('User must be a string, or object shoud have method __toString'); } return $user; } } |