src/Repository/Users/UserRepository.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\Repository\Users;
  3. use App\Entity\Users\Child as Student;
  4. use App\Entity\Users\StudentsParents;
  5. use App\Entity\Users\User;
  6. use Bo\SubscriptionBundle\Entity\OfferHistory;
  7. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  8. use Doctrine\ORM\Query\Expr\Join;
  9. use Doctrine\ORM\QueryBuilder;
  10. use Doctrine\Persistence\ManagerRegistry;
  11. use ED\BlogBundle\Interfaces\Repository\BlogUserRepositoryInterface;
  12. use Symfony\Component\Security\Core\User\UserInterface;
  13. // this class previously extended EntityRepository, but BaseUserRepository also extends EntityRepository, so we can change the extends here thanks to inheritance
  14. /**
  15.  * Class UserRepository
  16.  * @package Bo\UserBundle\Entity
  17.  */
  18. class UserRepository extends ServiceEntityRepository/* BaseUserRepository implements BlogUserRepositoryInterface*/
  19. {
  20.     public function __construct(ManagerRegistry $registry)
  21.     {
  22.         parent::__construct($registryUser::class);
  23.     }
  24.     /**
  25.      * @param UserInterface $user
  26.      * @param string $discr
  27.      */
  28.     public function changeUserDiscr(UserInterface $user$discr)
  29.     {
  30.         $stmt $this->_em->getConnection()->prepare('UPDATE aba_user SET discr = :discr WHERE id = :id');
  31.         $stmt->execute([
  32.             'discr' => $discr,
  33.             'id' => $user->getId(),
  34.         ]);
  35.         $this->_em->detach($user);
  36.     }
  37.     /**
  38.      * @param User $user
  39.      */
  40.     public function remove(User $user)
  41.     {
  42.         $this->_em->remove($user);
  43.         $this->_em->flush();
  44.     }
  45.     /**
  46.      * @param User $user
  47.      */
  48.     public function save(User $user)
  49.     {
  50.         $this->_em->persist($user);
  51.         $this->_em->flush($user);
  52.     }
  53.     public function getNBUser($type null){
  54.          $q $this->_em->createQueryBuilder('u')
  55.             ->select('COUNT(u)')
  56.              ->from(User::class,'u');
  57.          if(is_null($type)){
  58.            $q=$q->where('u INSTANCE OF BoStudentBundle:Student')->orWhere('u INSTANCE OF BoUserBundle:Parents');
  59.          }
  60.          else{
  61.            if($type == 'parents'){
  62.                $q=$q->where('u INSTANCE OF BoUserBundle:Parents');
  63.            }else{
  64.                $q=$q->where('u INSTANCE OF BoStudentBundle:Student');
  65.            }
  66.         }
  67.         $q $q->andWhere('u.created > \'2015-09-01 00:00:00\'');
  68.          return $q->getQuery()->getSingleScalarResult();
  69.     }
  70.     public function getUserForIntercom($type null,$offset 0$limit 100){
  71.         $q $this->_em->createQueryBuilder('l')
  72.             ->select('u')
  73.             ->from(User::class,'u');
  74.         if(is_null($type)){
  75.             $q=$q->where('u INSTANCE OF BoStudentBundle:Student')->orWhere('u INSTANCE OF BoUserBundle:Parents');
  76.         }
  77.         else{
  78.             if($type == 'parents'){
  79.                 $q=$q->where('u INSTANCE OF BoUserBundle:Parents');
  80.             }else{
  81.                 $q=$q->where('u INSTANCE OF BoStudentBundle:Student');
  82.             }
  83.         }
  84.         $q $q->andWhere('u.created > \'2015-09-01 00:00:00\'');
  85.         $q $q->setFirstResult($offset)->setMaxResults($limit);
  86.         return $q->getQuery()->getResult();
  87.     }
  88.     /**
  89.      * @param array $criteria
  90.      * @return array|User[]
  91.      */
  92.     public function findByUniqueCriteria($criteria)
  93.     {
  94.         return $this->_em->getRepository(User::class)->findBy($criteria);
  95.     }
  96.     /**
  97.      * Create the query for select old student
  98.      *
  99.      * @param string $lastLoginDate
  100.      * @return mixed
  101.      */
  102.     public function createQueryForSelectOldStudent($lastLoginDate)
  103.     {
  104.         $q $this->_em->createQueryBuilder('u')
  105.             ->select('u.id');
  106.         $this->initQueryBuilderForOldStudent($q$lastLoginDate);
  107.         return $q->getQuery();
  108.     }
  109.     /**
  110.      * Count the number of old students
  111.      *
  112.      * @param string $lastLoginDate
  113.      * @return mixed
  114.      * @throws \Doctrine\ORM\Query\QueryException
  115.      */
  116.     public function countOldStudent($lastLoginDate)
  117.     {
  118.         $q $this->_em->createQueryBuilder('u')
  119.             ->select('COUNT(u.id)');
  120.         $this->initQueryBuilderForOldStudent($q$lastLoginDate);
  121.         return $q->getQuery()->getSingleScalarResult();
  122.     }
  123.     /**
  124.      * Initialize query builder with restrictions of old student
  125.      *
  126.      * @param QueryBuilder $queryBuilder
  127.      * @param string $lastLoginDate
  128.      */
  129.     private function initQueryBuilderForOldStudent(QueryBuilder $queryBuilder$lastLoginDate)
  130.     {
  131.         $queryBuilder->from('BoStudentBundle:Student','u')
  132.             ->where('u.guardiant IS NULL')
  133.             ->andWhere('u.lastLogin IS NULL OR u.lastLogin < :lastLoginDate')
  134.             ->andWhere('
  135.                 (SELECT COUNT(s.id) FROM BoStudentBundle:OfferStudent s WHERE s.student = u.id) = 0 OR
  136.                 (SELECT COUNT(s2.id) FROM BoStudentBundle:OfferStudent s2 WHERE s2.student = u.id AND s2.unSubscripted IS NULL) = 0
  137.             ')
  138.             ->setParameter('lastLoginDate'$lastLoginDate);
  139.     }
  140.     /**
  141.      * Disable old students by id. NOTE : we juste add "-supp" sufix and change the status of the student
  142.      *
  143.      * @param array $ids
  144.      */
  145.     public function disableOldStudentByIds(array $ids)
  146.     {
  147.         $queryBuilder $this->_em->createQueryBuilder('u');
  148.         $queryBuilder->update('BoStudentBundle:Student','u')
  149.             ->set('u.username'$queryBuilder->expr()->concat('u.username'$queryBuilder->expr()->literal('-supp')))
  150.             ->set('u.email'$queryBuilder->expr()->concat('u.email'$queryBuilder->expr()->literal('-supp')))
  151.             ->set('u.usernameCanonical'$queryBuilder->expr()->concat('u.usernameCanonical'$queryBuilder->expr()->literal('-supp')))
  152.             ->set('u.emailCanonical'$queryBuilder->expr()->concat('u.emailCanonical'$queryBuilder->expr()->literal('-supp')))
  153.             ->set('u.status'OfferHistory::STATUS_DISABLE_MANUALLY)
  154.             ->where($queryBuilder->expr()->in('u.id'':ids'))
  155.             ->setParameter('ids'$ids)
  156.             ->getQuery()
  157.             ->execute();
  158.     }
  159.     /**
  160.      * All list admin staff lesbonsprofs
  161.      */
  162.     public function getAllStaff()
  163.     {
  164.         $qb $this->_em->createQueryBuilder()
  165.             ->select('u')
  166.             ->from('BoUserBundle:User''u')
  167.             ->Where("u.roles LIKE '%ROLE_MARKETING%' or u.roles LIKE '%ROLE_EDITOR%' or u.roles LIKE '%ROLE_SUPER_ADMIN%' or u.roles LIKE '%ROLE_ADMIN%' or u.roles LIKE '%ROLE_TEACHER_MAIN%' ")
  168.             ->orderBy('u.id','desc')
  169.             ->setMaxResults(150)
  170.         ;
  171.     }
  172.     public function checkEmailExist($id,$email)
  173.     {
  174.         return $this->createQueryBuilder('u')
  175.                 ->where("u.email = :email and u.id != :id")
  176.                 ->setParameters(['email'=>$email,'id'=>$id])
  177.             ->getQuery()->getResult()
  178.             ;
  179.     }
  180.     /**
  181.      * @param $username
  182.      */
  183.     public function getUsername($username)
  184.     {
  185.         $result $this->_em->createQueryBuilder()
  186.             ->select('u')
  187.             ->from('BoUserBundle:User''u')
  188.             ->where("u.username LIKE :username")
  189.             ->setParameter('username',  $username)
  190.             ->getQuery()
  191.             ->getResult();
  192.         return $result;
  193.     }
  194.     public function getBrothersNSisterByParents(array $parents){
  195.         if(empty($parents)){
  196.             return [];
  197.         }
  198.         $ids = [];
  199.         foreach ($parents as $row){
  200.             $ids[] = $row->getId();
  201.         }
  202.         $qb $this->_em->createQueryBuilder();
  203.         $result $this->_em->createQueryBuilder()
  204.             ->select('distinct(u),u,u.firstname')
  205.             ->from(User::class, 'u')
  206.             ->join(StudentsParents::class,'sp',Join::WITH,'sp.student=u.id')
  207.             ->where($qb->expr()->in('sp.parents'$ids))
  208.             ->orderBy('u.firstname','asc')
  209.             ->getQuery()
  210.             ->getResult();
  211.         $tab = [];
  212.         foreach ($result as $tmp){
  213.             $tab[] = $tmp[0];
  214.         }
  215.         return $tab;
  216.     }
  217. }