src/Repository/CourseUserEnrollmentRepository.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\CourseUserEnrollment;
  4. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  5. use Doctrine\Persistence\ManagerRegistry;
  6. /**
  7.  * @method CourseUserEnrollment|null find($id, $lockMode = null, $lockVersion = null)
  8.  * @method CourseUserEnrollment|null findOneBy(array $criteria, array $orderBy = null)
  9.  * @method CourseUserEnrollment[]    findAll()
  10.  * @method CourseUserEnrollment[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  11.  */
  12. class CourseUserEnrollmentRepository extends ServiceEntityRepository
  13. {
  14.     public function __construct(ManagerRegistry $registry)
  15.     {
  16.         parent::__construct($registryCourseUserEnrollment::class);
  17.     }
  18.     /**
  19.      * @throws ORMException
  20.      * @throws OptimisticLockException
  21.      */
  22.     public function remove(CourseUserEnrollment $entitybool $flush true): void
  23.     {
  24.         $this->_em->remove($entity);
  25.         if ($flush) {
  26.             $this->_em->flush();
  27.         }
  28.     }
  29.     public function findByPage($page$resultsPerPage$order 'ASC'$orderBy ""$keyword ""$user, array $statuses = ['enrolled''missed''failed'], $course ""$level ""$showDeleted false)
  30.     {
  31.         try {
  32.             $enrollments $this->createQueryBuilder('cue')
  33.                 ->leftJoin('cue.course''c')
  34.                 ->leftJoin('cue.user','u')
  35.                 ->leftJoin('u.personalInfo''pi')
  36.                 ->andWhere('u.isActive = :ia')
  37.                 ->setParameter('ia'1)
  38.                 ->setMaxResults($resultsPerPage)
  39.                 ->setFirstResult(($page 1) * $resultsPerPage);
  40.             
  41.                 if ($showDeleted) {
  42.                     $enrollments->andWhere('cue.deletedAt IS not NULL');
  43.                 } else {
  44.                     $enrollments->andWhere('cue.deletedAt IS NULL');
  45.                 }
  46.             if ($keyword !== "") {
  47.                 $enrollments->andWhere('c.title LIKE :k OR pi.firstName LIKE :k OR pi.middleName LIKE :k OR pi.lastName LIKE :k OR CONCAT(pi.firstName, \' \',pi.lastName) LIKE :k OR CONCAT(pi.firstName, \' \',pi.middleName, \' \',pi.lastName) LIKE :k')->setParameter('k''%' $keyword '%');
  48.                 // $enrollments->andWhere('c.title LIKE :val')->setParameter('val', '%' . $keyword . '%');
  49.             }
  50.             if ($course != "") {
  51.                 $enrollments->andWhere('c.id = :cid')->setParameter('cid'$course);
  52.             }
  53.             if ($level != "") {
  54.                 $enrollments->andWhere('c.level = :level')->setParameter('level'$level);
  55.             }
  56.             if (!empty($user)){
  57.                 $enrollments->andWhere('cue.user = :user')->setParameter('user'$user);
  58.             }
  59.             if (!empty($statuses)){
  60.                 $enrollments->andWhere('cue.status IN (:statuses)')->setParameter('statuses'$statuses);
  61.             }
  62.             if ($orderBy === "") {
  63.                 $enrollments->addSelect("(CASE WHEN cue.enrolledAt <= :now THEN 0 ELSE 1 END) AS HIDDEN order ")
  64.                 ->setParameter('now', new \DateTimeImmutable())
  65.                 ->addOrderBy('order''ASC')->addOrderBy('cue.createdAt''DESC');
  66.             } elseif($orderBy == "level"){
  67.                 $enrollments->addSelect("(CASE WHEN c.level = 'foundation' THEN 1 WHEN c.level = 'intermediate' THEN 2 WHEN c.level = 'advanced' THEN 3 ELSE 0 END) as HIDDEN courseLevel");
  68.                 $enrollments->groupBy('cue.id');
  69.                 $enrollments->orderBy('courseLevel'$order);       
  70.             } elseif($orderBy == 'user') {
  71.                 $enrollments->orderBy("pi.firstName"$order);
  72.             } else {
  73.                 $enrollments->orderBy("cue." $orderBy$order);
  74.             }
  75.             return $enrollments->getQuery()->getResult();
  76.         } catch (\Exception $exception) {
  77.             return [];
  78.         }
  79.     }
  80.     public function countByPage($keyword ""$user, array $statuses = ['enrolled''missed''failed'], $course "",$level ''$showDeleted false)
  81.     {
  82.         try {
  83.             $enrollments $this->createQueryBuilder('cue')
  84.                 ->leftJoin('cue.course''c')
  85.                 ->leftJoin('cue.user','u')
  86.                 ->leftJoin('u.personalInfo''pi')
  87.                 ->andWhere('u.isActive = :ia')
  88.                 ->setParameter('ia'1)
  89.                 ->select('count(distinct(cue.id))');
  90.             if ($showDeleted) {
  91.                 $enrollments->andWhere('cue.deletedAt IS not NULL');
  92.             } else {
  93.                 $enrollments->andWhere('cue.deletedAt IS NULL');
  94.             }
  95.             if ($keyword !== "") {
  96.                 $enrollments->andWhere('c.title LIKE :k OR pi.firstName LIKE :k OR pi.middleName LIKE :k OR pi.lastName LIKE :k OR CONCAT(pi.firstName, \' \',pi.lastName) LIKE :k OR CONCAT(pi.firstName, \' \',pi.middleName, \' \',pi.lastName) LIKE :k')->setParameter('k''%' $keyword '%');
  97.                 // $enrollments->andWhere('c.title LIKE :val')->setParameter('val', '%' . $keyword . '%');
  98.             }
  99.             if ($course != "") {
  100.                 $enrollments->andWhere('c.id = :cid')->setParameter('cid'$course);
  101.             }
  102.             if ($level != "") {
  103.                 $enrollments->andWhere('c.level = :level')->setParameter('level'$level);
  104.             }
  105.             if (!empty($user)){
  106.                 $enrollments->andWhere('cue.user = :user')->setParameter('user'$user);
  107.             }
  108.             if (!empty($statuses)){
  109.                 $enrollments->andWhere('cue.status IN (:statuses)')->setParameter('statuses'$statuses);
  110.             }
  111.             return $enrollments->getQuery()->getSingleScalarResult();
  112.         } catch (\Exception $exception) {
  113.             return [];
  114.         }
  115.     }
  116.     public function findExpireInDays($days){
  117.         $dt = new \DateTime();
  118.         $targetDay $dt->modify('+'.$days.' days')->format('Y-m-d');
  119.         $statuses = ['failed''enrolled'];
  120.         $enrollments $this->createQueryBuilder('cue')
  121.                     ->andWhere('cue.status IN (:statuses)')
  122.                     ->setParameter('statuses'$statuses)
  123.                     ->andWhere('cue.dueAt LIKE :day')
  124.                     ->setParameter('day'$targetDay.'%')
  125.                     ->andWhere('cue.deletedAt IS NULL');
  126.         return $enrollments->getQuery()->getResult();
  127.     }
  128.     // /**
  129.     //  * @return CourseUserEnrollment[] Returns an array of CourseUserEnrollment objects
  130.     //  */
  131.     /*
  132.     public function findByExampleField($value)
  133.     {
  134.         return $this->createQueryBuilder('c')
  135.             ->andWhere('c.exampleField = :val')
  136.             ->setParameter('val', $value)
  137.             ->orderBy('c.id', 'ASC')
  138.             ->setMaxResults(10)
  139.             ->getQuery()
  140.             ->getResult()
  141.         ;
  142.     }
  143.     */
  144.     /*
  145.     public function findOneBySomeField($value): ?CourseUserEnrollment
  146.     {
  147.         return $this->createQueryBuilder('c')
  148.             ->andWhere('c.exampleField = :val')
  149.             ->setParameter('val', $value)
  150.             ->getQuery()
  151.             ->getOneOrNullResult()
  152.         ;
  153.     }
  154.     */
  155. }