vendor/contao/core-bundle/src/Repository/RememberMeRepository.php line 30

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * This file is part of Contao.
  5.  *
  6.  * (c) Leo Feyer
  7.  *
  8.  * @license LGPL-3.0-or-later
  9.  */
  10. namespace Contao\CoreBundle\Repository;
  11. use Contao\CoreBundle\Entity\RememberMe;
  12. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  13. use Doctrine\DBAL\Connection;
  14. use Doctrine\DBAL\Types\Types;
  15. use Symfony\Bridge\Doctrine\ManagerRegistry;
  16. /**
  17.  * @template-extends ServiceEntityRepository<RememberMe>
  18.  *
  19.  * @internal
  20.  */
  21. class RememberMeRepository extends ServiceEntityRepository
  22. {
  23.     private Connection $connection;
  24.     public function __construct(ManagerRegistry $registry)
  25.     {
  26.         parent::__construct($registryRememberMe::class);
  27.         /** @var Connection $connection */
  28.         $connection $registry->getConnection();
  29.         $this->connection $connection;
  30.     }
  31.     public function lockTable(): void
  32.     {
  33.         $table $this->getClassMetadata()->getTableName();
  34.         $this->connection->executeStatement("LOCK TABLES $table WRITE, $table AS t0_ WRITE");
  35.     }
  36.     public function unlockTable(): void
  37.     {
  38.         $this->connection->executeStatement('UNLOCK TABLES');
  39.     }
  40.     /**
  41.      * @return array<RememberMe>
  42.      */
  43.     public function findBySeries(string $series): array
  44.     {
  45.         $qb $this->createQueryBuilder('rm');
  46.         $qb
  47.             ->where('rm.series = :series')
  48.             ->andWhere(
  49.                 $qb->expr()->orX(
  50.                     $qb->expr()->isNull('rm.expires'),
  51.                     $qb->expr()->lte('rm.expires'':now')
  52.                 )
  53.             )
  54.             ->setParameter('series'$series)
  55.             ->setParameter('now', new \DateTime(), Types::DATETIME_MUTABLE)
  56.             ->orderBy('rm.expires''ASC')
  57.         ;
  58.         return $qb->getQuery()->getResult();
  59.     }
  60.     public function deleteSiblings(RememberMe $entity): void
  61.     {
  62.         $qb $this->_em->createQueryBuilder();
  63.         $qb
  64.             ->delete($this->_entityName'rm')
  65.             ->where('rm.series = :series')
  66.             ->andWhere('rm.value != :value')
  67.             ->setParameter('series'$entity->getSeries())
  68.             ->setParameter('value'$entity->getValue())
  69.         ;
  70.         $qb->getQuery()->execute();
  71.     }
  72.     public function deleteBySeries(string $series): void
  73.     {
  74.         $qb $this->_em->createQueryBuilder();
  75.         $qb
  76.             ->delete($this->_entityName'rm')
  77.             ->where('rm.series = :series')
  78.             ->setParameter('series'$series)
  79.         ;
  80.         $qb->getQuery()->execute();
  81.     }
  82.     public function deleteExpired(int $lastUsedLifetimeint $expiresLifetime): void
  83.     {
  84.         $qb $this->_em->createQueryBuilder();
  85.         $qb
  86.             ->delete($this->_entityName'rm')
  87.             ->where('rm.lastUsed < :lastUsed')
  88.             ->orWhere('rm.expires < :expires')
  89.             ->setParameter('lastUsed', (new \DateTime())->sub(new \DateInterval('PT'.$lastUsedLifetime.'S')))
  90.             ->setParameter('expires', (new \DateTime())->sub(new \DateInterval('PT'.$expiresLifetime.'S')))
  91.         ;
  92.         $qb->getQuery()->execute();
  93.     }
  94.     public function persist(RememberMe ...$entities): void
  95.     {
  96.         foreach ($entities as $entity) {
  97.             $this->_em->persist($entity);
  98.         }
  99.         $this->_em->flush();
  100.     }
  101. }