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

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.         $this->connection $registry->getConnection();
  28.     }
  29.     public function lockTable(): void
  30.     {
  31.         $table $this->getClassMetadata()->getTableName();
  32.         $this->connection->executeStatement("LOCK TABLES $table WRITE, $table AS t0_ WRITE");
  33.     }
  34.     public function unlockTable(): void
  35.     {
  36.         $this->connection->executeStatement('UNLOCK TABLES');
  37.     }
  38.     /**
  39.      * @return array<RememberMe>
  40.      */
  41.     public function findBySeries(string $series): array
  42.     {
  43.         $qb $this->createQueryBuilder('rm');
  44.         $qb
  45.             ->where('rm.series = :series')
  46.             ->andWhere(
  47.                 $qb->expr()->orX(
  48.                     $qb->expr()->isNull('rm.expires'),
  49.                     $qb->expr()->lte('rm.expires'':now')
  50.                 )
  51.             )
  52.             ->setParameter('series'$series)
  53.             ->setParameter('now', new \DateTime(), Types::DATETIME_MUTABLE)
  54.             ->orderBy('rm.expires''ASC')
  55.         ;
  56.         return $qb->getQuery()->getResult();
  57.     }
  58.     public function deleteSiblings(RememberMe $entity): void
  59.     {
  60.         $qb $this->_em->createQueryBuilder();
  61.         $qb
  62.             ->delete($this->_entityName'rm')
  63.             ->where('rm.series = :series')
  64.             ->andWhere('rm.value != :value')
  65.             ->setParameter('series'$entity->getSeries())
  66.             ->setParameter('value'$entity->getValue())
  67.         ;
  68.         $qb->getQuery()->execute();
  69.     }
  70.     public function deleteBySeries(string $series): void
  71.     {
  72.         $qb $this->_em->createQueryBuilder();
  73.         $qb
  74.             ->delete($this->_entityName'rm')
  75.             ->where('rm.series = :series')
  76.             ->setParameter('series'$series)
  77.         ;
  78.         $qb->getQuery()->execute();
  79.     }
  80.     public function deleteExpired(int $lastUsedLifetimeint $expiresLifetime): void
  81.     {
  82.         $qb $this->_em->createQueryBuilder();
  83.         $qb
  84.             ->delete($this->_entityName'rm')
  85.             ->where('rm.lastUsed < :lastUsed')
  86.             ->orWhere('rm.expires < :expires')
  87.             ->setParameter('lastUsed', (new \DateTime())->sub(new \DateInterval('PT'.$lastUsedLifetime.'S')))
  88.             ->setParameter('expires', (new \DateTime())->sub(new \DateInterval('PT'.$expiresLifetime.'S')))
  89.         ;
  90.         $qb->getQuery()->execute();
  91.     }
  92.     public function persist(RememberMe ...$entities): void
  93.     {
  94.         foreach ($entities as $entity) {
  95.             $this->_em->persist($entity);
  96.         }
  97.         $this->_em->flush();
  98.     }
  99. }