src/WebBundle/Repository/UserRepository.php line 28

Open in your IDE?
  1. <?php
  2. namespace WebBundle\Repository;
  3. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  4. use Doctrine\DBAL\DBALException;
  5. use Doctrine\ORM\NonUniqueResultException;
  6. use Doctrine\ORM\NoResultException;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. use Exception;
  9. use Import1CBundle\Helper\v3\ConnectionHelper;
  10. use Symfony\Component\Security\Core\User\PasswordUpgraderInterface;
  11. use WebBundle\Entity\User;
  12. use WebBundle\Helper\App;
  13. use WebBundle\Helper\StrHelper;
  14. use WebBundle\Helper\UserHelper;
  15. use WebBundle\Traits\RepoTrait;
  16. /**
  17.  * @method User|null findOneByUnid(string $unid)
  18.  * @method User|null findOneByEmail(string $email)
  19.  * @method User|null findOneByToken(string $token)
  20.  */
  21. class UserRepository extends ServiceEntityRepository implements PasswordUpgraderInterface
  22. {
  23.     use RepoTrait;
  24.     public function __construct(ManagerRegistry $registry)
  25.     {
  26.         parent::__construct($registryUser::class);
  27.     }
  28.     public function upgradePassword(User $userstring $newHashedPassword)
  29.     {
  30.         $user->setPassword($newHashedPassword);
  31.         $user->setSalt(null);
  32.         $this->getEntityManager()->flush();
  33.     }
  34.     public function joinQuery($alias 'u')
  35.     {
  36.         return $this->createQueryBuilder($alias)
  37.             ->select("{$alias}");
  38.     }
  39.     /**
  40.      * Проверка токена
  41.      * @throws NonUniqueResultException
  42.      */
  43.     public function getUserByToken(string $token): ?User
  44.     {
  45.         $q $this->createQueryBuilder('u')
  46.             ->where('u.token = :token')
  47.             ->setParameter('token'$token)
  48.             ->setMaxResults(1)
  49.             ->getQuery();
  50.         return $q->getOneOrNullResult();
  51.     }
  52.     /**
  53.      * выбор менегеров для отчета по БМ
  54.      * @return array|null
  55.      */
  56.     public function getEmployerUserManager()
  57.     {
  58.         $q $this->createQueryBuilder('u')
  59.             ->select('DISTINCT(u.alias) as alias, u.id, u.unid, u.roles')
  60.             ->leftJoin('u.factories''f')
  61.             ->andWhere('f.user  is not null')
  62.             ->andWhere('u.id <> :id')
  63.             ->setParameter('id'492295)
  64.             //->andWhere('e.fired =:fired')
  65.             //->andWhere('f.status =:status')
  66.             //->setParameter('fired', false)
  67.             //->setParameter('status', BiConst::STATE_PUBLISHED)
  68.             ->orderBy('u.alias')
  69.             ->getQuery();
  70.         return $q->getResult();
  71.     }
  72.     /**
  73.      * Получаем всех юзеров, у которых указаны локали
  74.      * @return array|null
  75.      */
  76.     public function getActualUsers()
  77.     {
  78.         $role 'a:0:{}';
  79.         $q $this->createQueryBuilder('u')
  80.             ->andWhere('u.roles != :role')
  81.             ->setParameter('role'$role)
  82.             ->orderBy('u.alias')
  83.             ->getQuery();
  84.         $items $q->getArrayResult();
  85.         $all = [];
  86.         if ($items) {
  87.             foreach ($items as $item) {
  88.                 $all[$item['id']] = [
  89.                     'id' => $item['id'],
  90.                     'alias' => $item['alias'],
  91.                 ];
  92.             }
  93.         }
  94.         return $all;
  95.     }
  96.     /**
  97.      * Получаем всех юзеров, у которых назначены participants
  98.      * @return array|null
  99.      */
  100.     public function getUsersByParticipants()
  101.     {
  102.         $q $this->createQueryBuilder('u')
  103.             ->select('u,p')
  104.             ->innerJoin('u.participants''p')
  105.             ->orderBy('u.alias')
  106.             ->getQuery();
  107.         return $q->getArrayResult();
  108.     }
  109.     /**
  110.      * получить список менегеров серий для вывода в списке привязки звука
  111.      * @return array|null
  112.      */
  113.     public function getManagers()
  114.     {
  115.         $role '%ROLE_BM%';
  116.         $q $this->createQueryBuilder('u')
  117.             ->andWhere('u.roles like :role')
  118.             ->setParameter('role'$role)
  119.             ->orderBy('u.alias')
  120.             ->getQuery();
  121.         $items $q->getArrayResult();
  122.         $all = [];
  123.         if ($items) {
  124.             $all[] = ['id' => 'all''alias' => 'All'];
  125.             foreach ($items as $item) {
  126.                 $all[] = ['id' => $item['id'], 'alias' => $item['alias']];
  127.             }
  128.         }
  129.         return $all;
  130.     }
  131.     /**
  132.      * @param string $url
  133.      * @return array|null
  134.      */
  135.     public function getUrls($url)
  136.     {
  137.         $q $this->createQueryBuilder('u')
  138.             ->select('p.url')
  139.             ->innerJoin('u.profile''p')
  140.             ->andWhere('p.url LIKE :url')
  141.             ->setParameter('url'$url '%')
  142.             ->getQuery()
  143.             ->useQueryCache(true);
  144.         $res $q->getArrayResult();
  145.         return count($res) > array_column($res'url') : [];
  146.     }
  147.     /**
  148.      * Проверяет email на наличие у других юзеров
  149.      *
  150.      * @param $email
  151.      * @param $token
  152.      * @return int|mixed
  153.      */
  154.     public function checkEmail($email$token): int
  155.     {
  156.         $q $this->createQueryBuilder('u')
  157.             ->select('COUNT(u.id)')
  158.             ->andWhere('u.email = :email')
  159.             ->andWhere('u.token != :token')
  160.             ->setParameters([
  161.                 'email' => StrHelper::toLower($email),
  162.                 'token' => StrHelper::toLower($token),
  163.             ])
  164.             ->getQuery()
  165.             ->useQueryCache(true);
  166.         try {
  167.             return (int) $q->getSingleScalarResult();
  168.         } catch (NonUniqueResultException NoResultException $e) {
  169.             return 0;
  170.         }
  171.     }
  172.     /**
  173.      * получить список менегеров серий для вывода в списке привязки звука
  174.      * @return array|null
  175.      */
  176.     public function getListKons()
  177.     {
  178.         $q $this->createQueryBuilder('u')
  179.             ->select('u.id, u.unid, u.alias, u.roles, u.username, u.email')
  180.             ->andWhere('u.enabled = true')
  181.             ->andWhere('u.isActive = true')
  182.             ->andWhere('u.roles like :role AND u.roles not like :role_all')
  183.             ->setParameter('role''%ROLE_TR%')
  184.             ->setParameter('role_all''%ROLE_TR_ALL%')
  185.             ->orderBy('u.alias')
  186.             ->getQuery();
  187.         $items $q->getArrayResult();
  188.         return $items;
  189.     }
  190.     /**
  191.      * @param $id
  192.      * @return array
  193.      * @throws Exception
  194.      */
  195.     public function getUserForStatTrans($id)
  196.     {
  197.         $q $this->createQueryBuilder('u')
  198.             ->select('u.id, u.alias, u.roles, u.username, u.email')
  199.             ->andWhere('u.id = :id')
  200.             ->setParameter('id'$id)
  201.             ->getQuery();
  202.         $items $q->getArrayResult();
  203.         if ($items) {
  204.             $items $items[0];
  205.             $oServiceUser App::getContainer()->get('adm.service.users');
  206.             $items['alias'] = $oServiceUser->buildEasyName($items['alias']);
  207.         }
  208.         return $items;
  209.     }
  210.     /**
  211.      * @param $unid
  212.      * @return array
  213.      * @throws Exception
  214.      */
  215.     public function getUserForStatTransApi($unid)
  216.     {
  217.         $q $this->createQueryBuilder('u')
  218.             ->select('u.id, u.unid, u.alias, u.username')
  219.             ->andWhere('u.unid = :unid')->setParameter('unid'$unid)
  220.             ->andWhere('u.roles like :role')->setParameter('role''%ROLE_TR%')
  221.             ->getQuery();
  222.         $items $q->getArrayResult();
  223.         if ($items) {
  224.             $items $items[0];
  225.             $oServiceUser App::getContainer()->get('adm.service.users');
  226.             $items['alias'] = $oServiceUser->buildEasyName($items['alias']);
  227.         }
  228.         return $items;
  229.     }
  230.     /**
  231.      * Список консов для админки для страница контактов
  232.      * @param $logins
  233.      * @return array
  234.      */
  235.     public function getConsList($logins)
  236.     {
  237.         //$oServiceUser = App::getContainer()->get('adm.service.users');
  238.         $logins implode("', '"$logins);
  239.         $sql "SELECT
  240.                 u.id, u.unid, u.alias, u.username
  241.             FROM
  242.                 user u
  243.             WHERE u.username IN ('{$logins}')";
  244.         $items $this->_em->getConnection()->fetchAll($sql);
  245.         $rows = [];
  246.         foreach ($items as $item) {
  247.             $rows[$item['username']] = $item['username'] . ' (' $item['alias'] . ')';
  248.             //$rows[$item['username']] = $item['username'] . ' (' . $oServiceUser->buildEasyName($item['alias']) . ')';
  249.         }
  250.         return $rows;
  251.     }
  252.     /**
  253.      * @param $unids
  254.      * @return mixed
  255.      */
  256.     public function getUsersByUnids($unids)
  257.     {
  258.         $q $this->createQueryBuilder('u')
  259.             ->select('u')
  260.             ->andWhere('u.unid IN (:unids)')
  261.             ->setParameter('unids'$unids)
  262.             ->getQuery();
  263.         return $q->getResult();
  264.     }
  265.     public function getUsersWithNullUnids()
  266.     {
  267.         $q $this->createQueryBuilder('u')
  268.             ->select('u')
  269.             ->andWhere('u.unid is NULL')
  270.             ->getQuery();
  271.         return $q->getResult();
  272.     }
  273.     /**
  274.      * @param $nId
  275.      * @param $network
  276.      * @return mixed
  277.      */
  278.     public function getUsersByNetworkId($nId$network)
  279.     {
  280.         switch ($network) {
  281.             case 'google':
  282.                 $network 'google_id';
  283.                 break;
  284.             case 'fb':
  285.                 $network 'fb_id';
  286.                 break;
  287.             case 'vk':
  288.                 $network 'vk_id';
  289.                 break;
  290.             case 'inst':
  291.                 $network 'ig_id';
  292.                 break;
  293.         }
  294.         $user $this->createQueryBuilder('u')
  295.             ->select('u')
  296.             ->andWhere('u.' $network ' = :nId')
  297.             ->setParameter('nId'$nId)
  298.             ->getQuery()
  299.             ->getResult();
  300.         return $user[0] ?? false;
  301.     }
  302.     /**
  303.      * @param $sql
  304.      * @return bool
  305.      * @throws DBALException
  306.      * @throws DBALException
  307.      */
  308.     public function sql($sql)
  309.     {
  310.         $conn $this->getEntityManager()->getConnection();
  311.         $conn $conn->prepare($sql);
  312.         return $conn->execute();
  313.     }
  314.     /**
  315.      * получене всех клиентов если у которых привязан соц сеть
  316.      */
  317.     public function getAllUsersBySN()
  318.     {
  319.         return $this->createQueryBuilder('u')
  320.             ->andWhere('u.social_network is not null')
  321.             ->getQuery()->getResult();
  322.     }
  323.     /**
  324.      * Получение ФИО с скоращенными инициалами
  325.      * @param int $id
  326.      * @return false|string
  327.      * @throws DBALException
  328.      */
  329.     public function getUserEasyNameById(int $id)
  330.     {
  331.         $conn $this->_em->getConnection();
  332.         $id $conn->quote($id);
  333.         $sql "SELECT u.alias FROM user u WHERE u.id = {$id};";
  334.         $name $conn->query($sql)->fetchColumn(0);
  335.         if ($name) {
  336.             $name UserHelper::buildEasyName($name);
  337.         }
  338.         return $name;
  339.     }
  340.     public function getUsersForAmazonPersonalize()
  341.     {
  342.         $conn $this->_em->getConnection();
  343.         $query $conn->createQueryBuilder()
  344.             ->select('u.id''up.sex''lc.code as country')
  345.             ->from('user''u')
  346.             ->leftJoin('u''list_country''lc''lc.id = up.country')
  347.             ->where('u.is_active'1);
  348.         $data $query->execute()->fetchAll();
  349.         return $data;
  350.     }
  351.     /**
  352.      * @param string $unid
  353.      * @param string $email
  354.      * @return bool
  355.      * @throws DBALException
  356.      */
  357.     public function checkUniqueEmailByUnid(string $unidstring $email)
  358.     {
  359.         $conn $this->_em->getConnection();
  360.         $unid $conn->quote($unid);
  361.         $email $conn->quote($email);
  362.         $sql "SELECT u.id FROM user u WHERE u.email = {$email} and u.unid != {$unid};";
  363.         $id $conn->query($sql)->fetchColumn(0);
  364.         return !boolval($id);
  365.     }
  366.     public function getCountOfUsers()
  367.     {
  368.         $qb $this->getEntityManager()->createQueryBuilder();
  369.         $qb->select('count(user.id)');
  370.         $qb->from(User::class, 'user');
  371.         return $qb->getQuery()->getSingleScalarResult();
  372.     }
  373.     public function save(User $userbool $flush true): void
  374.     {
  375.         $this->getEntityManager()->persist($user);
  376.         if ($flush) {
  377.             $this->flush();
  378.         }
  379.     }
  380.     public function flush(): void
  381.     {
  382.         $this->getEntityManager()->flush();
  383.     }
  384.     public function getRecomendationGoogleUsers(int $pageint $limit): ?array
  385.     {
  386.         $start = ($page 1) * $limit;
  387.         $sql sprintf(
  388.             "SELECT id,token FROM `user` ORDER BY id LIMIT %d, %d;",
  389.             $start,
  390.             $limit
  391.         );
  392.         return ConnectionHelper::getInstance()->executeColumnsRows($sql);
  393.     }
  394. }