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

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