EventRepository.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\Event;
  4. use App\Entity\Gamemaster;
  5. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use Doctrine\DBAL\Types\Types;
  8. /**
  9. * @extends ServiceEntityRepository<Event>
  10. */
  11. class EventRepository extends ServiceEntityRepository
  12. {
  13. public function __construct(ManagerRegistry $registry)
  14. {
  15. parent::__construct($registry, Event::class);
  16. }
  17. /*
  18. * Extraire les événements :
  19. * - public = true
  20. * - published = true
  21. * - endOn > now
  22. */
  23. public function findEventsToCome(bool $public=true): array
  24. {
  25. // Et il faut la date du moment
  26. $dateNow = new \DateTime('now');
  27. $qb = $this->createQueryBuilder('e')
  28. ->where('e.published = :published')
  29. ->andWhere('e.endOn > :dateNow')
  30. ->setParameter('published', true)
  31. ->setParameter('dateNow', $dateNow);
  32. // Prise en compte public / privé
  33. if ($public) {
  34. $qb->andWhere('(e.private = false OR e.private IS NULL)');
  35. }
  36. $query = $qb->orderBy('e.startOn', 'ASC')
  37. ->getQuery();
  38. return $query->getResult();
  39. }
  40. /*
  41. * Extraire les événements d'une année / mois
  42. * - published = true
  43. * - startOn >= 01/mois/année
  44. * - startOn < 01/mois+1/année
  45. */
  46. public function findEventsOfMonth(int $month, int $year, bool $public=true): array
  47. {
  48. // On génère les dates
  49. $dateStartMonth = new \DateTime(sprintf('%04d-%02d-01 00:00:00', $year, $month));
  50. $dateEndMonth = clone $dateStartMonth;
  51. $dateEndMonth->modify('last day of this month')->setTime(23, 59, 59);
  52. // Construction de la requête
  53. $qb = $this->createQueryBuilder('e')
  54. ->where('e.published = :published')
  55. ->andWhere('e.startOn >= :dateStartMonth')
  56. ->andWhere('e.endOn <= :dateEndMonth')
  57. ->setParameter('published', true)
  58. ->setParameter('dateStartMonth', $dateStartMonth)
  59. ->setParameter('dateEndMonth', $dateEndMonth);
  60. // Prise en compte public / privé
  61. if ($public) {
  62. $qb->andWhere('(e.private = false OR e.private IS NULL)');
  63. }
  64. $query = $qb->orderBy('e.startOn', 'ASC')
  65. ->getQuery();
  66. return $query->getResult();
  67. }
  68. /**
  69. * @return Event[]
  70. */
  71. public function findEventsToPrepare(?Gamemaster $gamemaster): array
  72. {
  73. // Et il faut la date du moment
  74. $dateNow = new \DateTime('now');
  75. // 19-09-2025 : suppression du statut "non publié" pour un EVT
  76. $qb = $this->createQueryBuilder('e')
  77. ->where('e.endOn > :dateNow')
  78. ->setParameter('dateNow', $dateNow)
  79. ;
  80. // Ne marche pas, va savoir ! => ajouter ?Gamemaster $gamemaster dans la function
  81. // TODO: à revoir
  82. // if ($gamemaster) {
  83. // $qb->andWhere(':gamemaster MEMBER OF e.gamemastersAssigned')
  84. // ->setParameter('gamemaster', $gamemaster);
  85. //}
  86. $query = $qb->orderBy('e.startOn', 'ASC')
  87. ->getQuery();
  88. $result = $query->getResult();
  89. if ($gamemaster) {
  90. $result = array_filter($result, function (Event $event) use ($gamemaster) {
  91. return $event->getGamemastersAssigned()->contains($gamemaster);
  92. });
  93. }
  94. return array_values($result);
  95. }
  96. // /**
  97. // * @return Event[] Returns an array of Event objects
  98. // */
  99. // public function findByExampleField($value): array
  100. // {
  101. // return $this->createQueryBuilder('e')
  102. // ->andWhere('e.exampleField = :val')
  103. // ->setParameter('val', $value)
  104. // ->orderBy('e.id', 'ASC')
  105. // ->setMaxResults(10)
  106. // ->getQuery()
  107. // ->getResult()
  108. // ;
  109. // }
  110. // public function findOneBySomeField($value): ?Event
  111. // {
  112. // return $this->createQueryBuilder('e')
  113. // ->andWhere('e.exampleField = :val')
  114. // ->setParameter('val', $value)
  115. // ->getQuery()
  116. // ->getOneOrNullResult()
  117. // ;
  118. // }
  119. }