src/Controller/VinylController.php line 51

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Label;
  4. use App\Entity\Style;
  5. use App\Entity\Vinyl;
  6. use App\Entity\Artist;
  7. use DateTimeImmutable;
  8. use App\Form\SearchType;
  9. use App\Services\Search;
  10. use App\Repository\LabelRepository;
  11. use App\Repository\StyleRepository;
  12. use App\Repository\VinylRepository;
  13. use App\Repository\ArtistRepository;
  14. use App\Repository\ParamsRepository;
  15. use App\Repository\PromoteRepository;
  16. use Knp\Component\Pager\PaginatorInterface;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\RequestStack;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  22. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  23. class VinylController extends AbstractController
  24. {
  25.     private $repository;
  26.     private $styleRepository;
  27.     private $cart;
  28.     private $paramsRepository;
  29.     
  30.     public function __construct(VinylRepository $vinylRepositoryStyleRepository $styleRepositoryRequestStack $requestStackParamsRepository $paramsRepository)
  31.     {
  32.         $this->repository $vinylRepository;
  33.         $this->styleRepository $styleRepository;
  34.         $this->paramsRepository $paramsRepository;
  35.         $session $requestStack->getSession();
  36.         $this->cart $session->get('cart', [
  37.             'items' => [],
  38.             'qty' => 0,
  39.             'total' => 0
  40.         ]);
  41.     }
  42.     /**
  43.      * @Route("/vinyles/{stylename?}", name="vinyls_index")
  44.      */
  45.     public function index(?string $stylenameVinylRepository $vinylRepositoryLabelRepository $labelRepositoryArtistRepository $artistRepositoryRequest $requestPaginatorInterface $paginator): Response
  46.     {
  47.         $style null;
  48.         $current 'vinyls';
  49.         if ($stylename == "neufs" || $stylename == "occasions" || $stylename == "restock") {
  50.             $current .= '-' $stylename;
  51.             if ($stylename === "restock") {
  52.                 $query $vinylRepository->getRestock(['updatedAt' => 'DESC']);
  53.             } else {
  54.                 $style $stylename;
  55.                 $query $vinylRepository->findBy(['state' => substr($stylename,0, -1)], ['createdAt' => 'DESC']);
  56.             }
  57.         }
  58.         else {
  59.             if (empty($stylename)) {
  60.                 $query $vinylRepository->getAll();
  61.             }
  62.             else {
  63.                 $style $this->styleRepository->findOneBy(['slug' => $stylename]);
  64.                 
  65.                 if ($style) {
  66.                     //$vinyls = $style->getVinyls();
  67.                     $query $vinylRepository->getByStyle($style);
  68.                 }
  69.                 else {
  70.                     $query $vinylRepository->findAll();
  71.                     $this->addFlash('danger'"Style inconnu.");
  72.                 }
  73.             }
  74.         }
  75.         $vinyls $paginator->paginate($query$request->query->getInt('page'1),40);
  76.         /** Tri */
  77.         $sortType $request->query->get('sort''created_at');
  78.         $direction $request->query->get('direction''desc');
  79.         $sort $sortType '-' $direction;
  80.         // Recherche
  81.         $search = new Search();
  82.         $form $this->createForm(SearchType::class, $search)->handleRequest($request);
  83.         return $this->render('vinyl/index.html.twig', [
  84.             'current' => $current,
  85.             'params' => $this->paramsRepository->findAll(),
  86.             'styles' => $this->styleRepository->findBy([], ['name' => 'ASC']),
  87.             'search' => (null != $style && ($style != 'neufs' && $style != 'occasions' && $style != 'restock')) ? $style->getName() : $style,
  88.             'vinyls' => $vinyls,
  89.             'search_form' => $form->createView(),
  90.             'page' => $request->query->getInt('page'1),
  91.             'sort' => $sort,
  92.         ]);
  93.     }
  94.     /**
  95.      * @Route("/vinyle/{slug}", priority=1, name="vinyls_show")
  96.      */
  97.     public function show(Vinyl $vinylLabelRepository $labelRepositoryArtistRepository $artistRepositoryPromoteRepository $promoteRepositoryRequest $request): Response
  98.     {
  99.         $artists = [];
  100.         foreach ($vinyl->getTracks() as $track) {
  101.             foreach ($track->getArtists() as $artist) {
  102.                 if(!in_array($artist$artists)){
  103.                     $artists[] = $artist;
  104.                 }
  105.             }
  106.         }
  107.         // Recherche
  108.         $search = new Search();
  109.         $form $this->createForm(SearchType::class, $search)->handleRequest($request);
  110.         
  111.         $new $promoteRepository->find(1)->getProducts();
  112.         $neufs = [];
  113.         $occasions = [];
  114.         foreach ($new as $v) {
  115.             if ($v->getState() == "neuf") {
  116.                 $neufs[] = $v;
  117.             }
  118.             else {
  119.                 $occasions[] = $v;
  120.             }
  121.         }
  122.         $news = [
  123.             'neufs' => $neufs,
  124.             'occasions' => $occasions
  125.         ];
  126.         $bestSeller $promoteRepository->find(2)->getProducts();
  127.         $repress $promoteRepository->find(3)->getProducts();
  128.         $restock $promoteRepository->find(4)->getProducts();
  129.         $promo $this->repository->getPromo();
  130.         $homeProd $promoteRepository->find(6)->getProducts();
  131.         $extras = [
  132.             'last' => $this->repository->getLast(), 
  133.             'news' => $news,
  134.             'best' => $bestSeller,
  135.             'restock' => $restock,
  136.             'repress' => $repress,
  137.             'promo' => $promo,
  138.             'homeprod' => $homeProd,
  139.         ];
  140.         return $this->render('vinyl/show.html.twig', [
  141.             'current' => 'vinyls',
  142.             'params' => $this->paramsRepository->findAll(),
  143.             'styles' => $this->styleRepository->findBy([], ['name' => 'ASC']),
  144.             'vinyl' => $vinyl,
  145.             'artists' => $artists,
  146.             'extras' => $extras,
  147.             'search_form' => $form->createView(),
  148.         ]);
  149.     }
  150.     /**
  151.      * @Route("/vinyles/search", priority=1, name="vinyls_search")
  152.      */
  153.     public function search(Request $requestPaginatorInterface $paginatorPromoteRepository $promoteRepository): Response
  154.     {
  155.         
  156.         $search = new Search();
  157.         $form $this->createForm(SearchType::class, $search)->handleRequest($request);
  158.         $order 'createdAt';
  159.         if ($form->isSubmitted()) {
  160.             if(
  161.                 $search->getPromo() &&
  162.                 !$search->getRepress() &&
  163.                 !$search->getHomeprod() &&
  164.                 empty($search->getStyles()) &&
  165.                 $search->getLabel() == null &&
  166.                 $search->getArtist() == null &&
  167.                 $search->getYear() == null &&
  168.                 !$search->getInstock() &&
  169.                 $search->getQ() == null
  170.                 
  171.             ){
  172.                 $s 'promotions';
  173.                 $order 'updatedAt';
  174.             }
  175.             elseif(
  176.                 $search->getRepress() &&
  177.                 !$search->getPromo() &&
  178.                 !$search->getHomeprod() &&
  179.                 empty($search->getStyles()) && 
  180.                 $search->getLabel() == null &&
  181.                 $search->getArtist() == null &&
  182.                 $search->getYear() == null &&
  183.                 !$search->getInstock() &&
  184.                 $search->getQ() == null
  185.                 
  186.             ){
  187.                 $s 'represses';
  188.                 
  189.             }
  190.             elseif(
  191.                 !$search->getRepress() &&
  192.                 !$search->getPromo() &&
  193.                 $search->getHomeprod() &&
  194.                 empty($search->getStyles()) &&
  195.                 $search->getLabel() == null &&
  196.                 $search->getArtist() == null &&
  197.                 $search->getYear() == null &&
  198.                 !$search->getInstock() &&
  199.                 $search->getQ() == null
  200.             ){
  201.                 $s 'home-prod';
  202.             }
  203.             else {
  204.                 $s 'recherche';
  205.             }
  206.         }
  207.         else {
  208.             $s $search->getRepress() ? 'represses' '';
  209.         }
  210.         $promote null;
  211.         if ($search->getRepress()) {
  212.             $promote $promoteRepository->find(3);
  213.         }
  214.         if ($request->query->get('homeprod')) {
  215.             $promote $promoteRepository->find(6);
  216.             $search->setHomeprod(true);
  217.         }
  218.         
  219.         $query $s == 'represses' $promote->getProducts() : $this->repository->search($search$promote$order);
  220.         $vinyls $paginator->paginate($query$request->query->getInt('page'1),40);
  221.        
  222.         /** Tri */
  223.         $sortType $request->query->get('sort''updated_at');
  224.         $direction $request->query->get('direction''desc');
  225.         $sort $sortType '-' $direction;
  226.         
  227.         return $this->render('vinyl/index.html.twig', [
  228.             'current' => 'vinyls',
  229.             'params' => $this->paramsRepository->findAll(),
  230.             'styles' => $this->styleRepository->findBy([], ['name' => 'ASC']),
  231.             'vinyls' => $vinyls,
  232.             'search_form' => $form->createView(),
  233.             'search' => $s,
  234.             'search_data' => $search,
  235.             'page' => $request->query->getInt('page'1),
  236.             'sort' => $sort,
  237.         ]);
  238.     }
  239.     /**
  240.      * @Route("/label/{slug}", priority=1, name="vinyls_label")
  241.      */
  242.     public function label(Label $labelLabelRepository $labelRepositoryArtistRepository $artistRepositoryRequest $requestPaginatorInterface $paginator): Response
  243.     {
  244.         $query $this->repository->findBy(['label' => $label], ['designation' => 'ASC']);
  245.         $vinyls $paginator->paginate($query$request->query->getInt('page'1),40);
  246.         // Recherche
  247.         $searchData = [
  248.             'labels' => $labelRepository->findBy([], ['name' => 'ASC']),
  249.             'artists' => $artistRepository->findBy([], ['name' => 'ASC']),
  250.         ];
  251.         $search = new Search();
  252.         $form $this->createForm(SearchType::class, $search)->handleRequest($request);
  253.         /** Tri */
  254.         $sortType $request->query->get('sort''created_at');
  255.         $direction $request->query->get('direction''desc');
  256.         $sort $sortType '-' $direction;
  257.         
  258.         return $this->render('vinyl/index.html.twig', [
  259.             'current' => 'vinyls',
  260.             'params' => $this->paramsRepository->findAll(),
  261.             'styles' => $this->styleRepository->findBy([], ['name' => 'ASC']),
  262.             'vinyls' => $vinyls,
  263.             'search' => $label->getName(),
  264.             'search_form' => $form->createView(),
  265.             'search_data' => $searchData,
  266.             'page' => $request->query->getInt('page'1),
  267.             'sort' => $sort,
  268.         ]);
  269.     }   
  270.        
  271.     /**
  272.      * @Route("/artiste/{artist}", priority=1, name="vinyls_artist")
  273.      */
  274.     public function artist(Artist $artistLabelRepository $labelRepositoryArtistRepository $artistRepositoryRequest $requestPaginatorInterface $paginator): Response
  275.     {
  276.         $tracks $artist->getTracks();
  277.         $query = [];
  278.         foreach ($tracks as $track) {
  279.             if (!in_array($track->getVinyl(), $query)) {
  280.                 $query[] = $track->getVinyl();
  281.             }
  282.         }
  283.         $vinyls $paginator->paginate($query$request->query->getInt('page'1),40);
  284.         // Recherche
  285.         $searchData = [
  286.             'labels' => $labelRepository->findBy([], ['name' => 'ASC']),
  287.             'artists' => $artistRepository->findBy([], ['name' => 'ASC']),
  288.         ];
  289.         $search = new Search();
  290.         $form $this->createForm(SearchType::class, $search)->handleRequest($request);
  291.         /** Tri */
  292.         $sortType $request->query->get('sort''created_at');
  293.         $direction $request->query->get('direction''desc');
  294.         $sort $sortType '-' $direction;
  295.         
  296.         return $this->render('vinyl/index.html.twig', [
  297.             'current' => 'vinyls',
  298.             'params' => $this->paramsRepository->findAll(),
  299.             'styles' => $this->styleRepository->findBy([], ['name' => 'ASC']),
  300.             'vinyls' => $vinyls,
  301.             'search' => $artist->getName(),
  302.             'search_form' => $form->createView(),
  303.             'search_data' => $searchData,
  304.             'page' => $request->query->getInt('page'1),
  305.             'sort' => $sort,
  306.         ]);
  307.     }
  308.     
  309. }