Advertisement
Guest User

Untitled

a guest
Jan 15th, 2019
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.82 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Repository;
  4.  
  5. use App\Entity\User;
  6. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  7. use Symfony\Bridge\Doctrine\RegistryInterface;
  8. use App\Entity\Post;
  9. use App\Entity\Tag;
  10. use Doctrine\Common\Persistence\ManagerRegistry;
  11. use Doctrine\ORM\Query;
  12. use Pagerfanta\Adapter\DoctrineORMAdapter;
  13. use Pagerfanta\Pagerfanta;
  14.  
  15. use FOS\ElasticaBundle\Repository;
  16.  
  17. /**
  18.  * @method User|null find($id, $lockMode = null, $lockVersion = null)
  19.  * @method User|null findOneBy(array $criteria, array $orderBy = null)
  20.  * @method User[]    findAll()
  21.  * @method User[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  22.  */
  23. class UserRepository extends ServiceEntityRepository
  24. {
  25.     public function __construct(RegistryInterface $registry)
  26.     {
  27.         parent::__construct($registry, User::class);
  28.     }
  29.  
  30.     public function findOneByEmail($email): ?User
  31.     {
  32.         return $this->createQueryBuilder('u')
  33.             ->andWhere('u.exampleField = :val')
  34.             ->setParameter('val', $email)
  35.             ->getQuery()
  36.             ->getOneOrNullResult()
  37.         ;
  38.     }
  39.  
  40.     public function findByUsername($title)
  41.     {
  42.         return $this->getEntityManager()
  43.             ->createQuery(
  44. //                'SELECT username, roles FROM AppBundle:User users WHERE users.username LIKE %:title%'
  45. //                'SELECT username, roles FROM AppBundle:User users WHERE users.username COLLATE UTF8_GENERAL_CI LIKE %'.$title.'%'
  46.                 "SELECT username, roles FROM AppBundle:User users WHERE users.username LIKE $title"
  47.             )
  48.             //->setParameter('title', '%' . $title . '%')
  49.             //->getQuery()
  50.             ->getResult();
  51.     }
  52.  
  53.  
  54.     /**
  55.      * @param $title
  56.      * @return User[]
  57.      */
  58.     public function findByUsernameCustom($title){
  59.         {
  60.             return $this->getEntityManager()
  61.                 ->createQuery(
  62.                 'SELECT username, roles FROM AppBundle:User users WHERE users.username LIKE %:title%'
  63. //                    'SELECT username, roles FROM user WHERE user.username COLLATE UTF8_GENERAL_CI LIKE %'.$title.'%'
  64.                 )
  65.                 //->setParameter('title', '%' . $title . '%')
  66.                 ->getResult();
  67.         }
  68.     }
  69. //    /**
  70. //     * @return User[] Returns an array of User objects
  71. //     */
  72.     /*
  73.     public function findByExampleField($value)
  74.     {
  75.         return $this->createQueryBuilder('u')
  76.             ->andWhere('u.exampleField = :val')
  77.             ->setParameter('val', $value)
  78.             ->orderBy('u.id', 'ASC')
  79.             ->setMaxResults(10)
  80.             ->getQuery()
  81.             ->getResult()
  82.         ;;
  83.     }
  84.     */
  85.  
  86.     /*
  87.     public function findOneBySomeField($value): ?User
  88.     {
  89.         return $this->createQueryBuilder('u')
  90.             ->andWhere('u.exampleField = :val')
  91.             ->setParameter('val', $value)
  92.             ->getQuery()
  93.             ->getOneOrNullResult()
  94.         ;
  95.     }
  96.     */
  97.  
  98.     /**
  99.      * @return User[]
  100.      */
  101.     public function findBySearchQuery(string $rawQuery, int $limit = 5, string $sort = "DESC", string $sortBy = "date"): array
  102.     {
  103.         $query = $this->sanitizeSearchQuery($rawQuery);
  104.         $sort = $this->sanitizeSearchQuery($sort);
  105.         if(($sort != 'ASC')&&($sort != 'DESC')) $sort = 'DESC';
  106.         if(($sortBy != 'date')&&($sortBy != 'name')){
  107.             $sortBy = 'creationdatetime';
  108.         } else {
  109.             if($sortBy=="name") $sortBy = "username";
  110.             if($sortBy=="date") $sortBy = "creationdatetime";
  111.         }
  112.         $searchTerms = $this->extractSearchTerms($query);
  113.         if (0 === \count($searchTerms)) {
  114.             return [];
  115.         }
  116.         $queryBuilder = $this->createQueryBuilder('p');
  117.         foreach ($searchTerms as $key => $term) {
  118.             $queryBuilder
  119.                 ->orWhere('p.username LIKE :t_'.$key)
  120.                 ->setParameter('t_'.$key, '%'.$term.'%')
  121.             ;
  122.         }
  123.         return $queryBuilder
  124. //            ->orderBy('p.creationdatetime', 'DESC')
  125. //            ->orderBy('p.creationdatetime', $sort)
  126.             ->orderBy('p.'.$sortBy, $sort)
  127.             ->setMaxResults($limit)
  128.             ->getQuery()
  129.             ->getResult();
  130.     }
  131.  
  132.     /**
  133.      * Removes all non-alphanumeric characters except whitespaces.
  134.      */
  135.     private function sanitizeSearchQuery(string $query): string
  136.     {
  137.         return trim(preg_replace('/[[:space:]]+/', ' ', $query));
  138.     }
  139.     /**
  140.      * Splits the search query into terms and removes the ones which are irrelevant.
  141.      */
  142.     private function extractSearchTerms(string $searchQuery): array
  143.     {
  144.         $terms = array_unique(explode(' ', $searchQuery));
  145.         return array_filter($terms, function ($term) {
  146.             return 2 <= mb_strlen($term);
  147.         });
  148.     }
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement