src/Controller/Block/BlockController.php line 206

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Block;
  3. use App\Env;
  4. use App\Entity\Cat;
  5. use App\Entity\Char;
  6. use App\Entity\Charval;
  7. use App\Entity\Page;
  8. use App\DTO\AppDTO;
  9. use App\Entity\Catpage;
  10. use App\Entity\Timer;
  11. use RecursiveArrayIterator;
  12. use App\Service\Cache\Cache;
  13. use App\Service\Filter\Cats;
  14. use App\Service\Filter\Chars;
  15. use App\Service\Filter\Prods;
  16. use App\Service\Filter\Filter;
  17. use RecursiveIteratorIterator;
  18. use App\Repository\CatRepository;
  19. use App\Repository\CharRepository;
  20. use App\Repository\PageRepository;
  21. use App\Repository\TimerRepository;
  22. use App\Repository\CharvalRepository;
  23. use Doctrine\ORM\EntityManagerInterface;
  24. use Doctrine\ORM\Query\ResultSetMapping;
  25. use App\Model\Prod as ModelProd;
  26. use App\Model\Cart as ModelCart;
  27. use App\Repository\CatpageRepository;
  28. use Symfony\Contracts\Cache\CacheInterface;
  29. use Symfony\Component\HttpFoundation\Request;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\Routing\Annotation\Route;
  32. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  33. use Symfony\Component\HttpKernel\EventListener\AbstractSessionListener;
  34. class BlockController extends AbstractController
  35. {
  36.     protected EntityManagerInterface $em;
  37.     protected CacheInterface $Cache;
  38.     protected AppDTO $app;
  39.     protected ModelProd $ModelProd;
  40.     protected ModelCart $ModelCart;
  41.     //Repositories
  42.     protected PageRepository $Pages;
  43.     protected CatRepository $Cats;
  44.     protected CatpageRepository $Catpages;
  45.     protected TimerRepository $Timers;
  46.     protected CharRepository $Chars;
  47.     protected CharvalRepository $Charvals;
  48.     public function __construct(EntityManagerInterface $emCacheInterface $CacheAppDTO $appModelProd $ModelProdModelCart $ModelCart)
  49.     {
  50.         $this->Cache $Cache;
  51.         $this->em $em;
  52.         $this->app $app;
  53.         $this->ModelProd $ModelProd;
  54.         $this->ModelCart $ModelCart;
  55.         $this->Pages $em->getRepository(Page::class);
  56.         $this->Cats $em->getRepository(Cat::class);
  57.         $this->Catpages $em->getRepository(Catpage::class);
  58.         $this->Timers $em->getRepository(Timer::class);
  59.         $this->Chars $em->getRepository(Char::class);
  60.         $this->Charvals $em->getRepository(Charval::class);
  61.     }
  62.     #[Route('/{_locale}/block/jslabels'name'block_js_labels'requirements: ['_locale' => '%app.langs%'])]
  63.     public function jsLabelsBlock(): Response
  64.     {
  65.         $response $this->render('block/jslabels.html.twig');
  66.         $response Cache::http($response3600);
  67.         return $response;
  68.     }
  69.     #[Route('/{_locale}/block/topmenu/{intname}'name'block_top_menu'requirements: ['_locale' => '%app.langs%'])]
  70.     public function menuBlock(string $intname): Response
  71.     {
  72.         $menu $this->Pages->findBy(["type" => "page""visible" => 1"page" => 0], ["prior" => "DESC"]);
  73.         $response $this->render('block/topmenu.html.twig', [
  74.             'menus' => $menu,
  75.             'intname' => $intname,
  76.         ]);
  77.         $response Cache::http($response3600);
  78.         return $response;
  79.     }
  80.     #[Route('/{_locale}/block/footmenu'name'block_foot_menu'requirements: ['_locale' => '%app.langs%'])]
  81.     public function footMenuBlock(): Response
  82.     {
  83.         $menu $this->Pages->findBy(["type" => "page""visible" => 1"page" => 0], ["prior" => "DESC"]);
  84.         $response $this->render('block/footmenu.html.twig', [
  85.             'menus' => $menu,
  86.         ]);
  87.         $response Cache::http($response3600);
  88.         return $response;
  89.     }
  90.     #[Route('/{_locale}/block/catmenu/{template}'name'block_catmenu'requirements: ['_locale' => '%app.langs%'])]
  91.     public function catMenuBlock(string $template): Response
  92.     {
  93.         $menu $this->Cats->findBy(["visible" => 1"cat" => 0], ["prior" => "DESC"]);
  94.         foreach ($menu as $k => $cat) {
  95.             $menu[$k]->setCont('');
  96.             $menu[$k]->subcats $this->Cats->findBy(["visible" => 1"cat" => $cat->getId()], ["prior" => "DESC"]);
  97.             if (count($menu[$k]->subcats)) {
  98.                 foreach ($menu[$k]->subcats as $kk => $subcat) {
  99.                     $menu[$k]->subcats[$kk]->setCont('');
  100.                     $menu[$k]->subcats[$kk]->subcats $this->Cats->findBy(["visible" => 1"cat" => $subcat->getId()], ["prior" => "DESC"]);                    
  101.                 }
  102.             } else {
  103.                 unset($menu[$k]->subcats);
  104.             }
  105.         }
  106.         $response $this->render('block/'.$template.'.html.twig', [
  107.             'menu' => $menu,
  108.         ]);
  109.         $response Cache::http($response3600);
  110.         return $response;
  111.     }
  112.     #[Route('/{_locale}/block/speccatmenu/{spec}/{cat_cat}/{cat_id}/{search}'name'block_catmenu_spec'requirements: ['_locale' => '%app.langs%'])]
  113.     public function specCatMenuBlock(string $specint $cat_catint $cat_idstring $searchCats $Cats): Response
  114.     {           
  115.         $cats $Cats->getSpecCatMenu($cat_id$spec$search);
  116.         $catpages = [];
  117.         foreach ($cats as $k => $v) {            
  118.             foreach ($v as $kk => $subcat) {
  119.                 $catpages[$subcat['id']] = $this->Catpages->findBy(["visible" => 1"cat" => $subcat['id']], ["prior" => "DESC"]);
  120.                 if (empty($catpages[$subcat['id']])) {
  121.                     unset($catpages[$subcat['id']]);
  122.                 }
  123.             }
  124.         }
  125.         $response $this->render('block/speccatmenu.html.twig', [
  126.             'menu' => $cats,
  127.             'spec' => $spec,
  128.             'catpages' => $catpages,
  129.             'parent_id' => $cat_cat,
  130.             'cat_id' => $cat_id,
  131.             'search' => $search,
  132.         ]);
  133.         $response Cache::http($response3600);
  134.         return $response;
  135.     }
  136.     #[Route('/{_locale}/block/filter/{cat_id}/{cat_intname}/filter-{filters}'name'block_filter'requirements: ['_locale' => '%app.langs%'])]
  137.     #[Route('/{_locale}/block/filter/{spec}/{cat_id}/{cat_intname}/filter-{filters}'name'block_filter_spec'requirements: ['_locale' => '%app.langs%'])]
  138.     #[Route('/{_locale}/block/filter2/{cat_id}/{cat_intname}/filter-{filters}'name'block_filter'requirements: ['_locale' => '%app.langs%'])]
  139.     #[Route('/{_locale}/block/filter2/{spec}/{cat_id}/{cat_intname}/filter-{filters}'name'block_filter_spec'requirements: ['_locale' => '%app.langs%'])]
  140.     public function filterBlock(Request $requestChars $CharsProds $Prodsint $cat_idstring $cat_intname ''string $filters ''string $spec ''): Response
  141.     {
  142.         $chars $Chars->getChars($cat_id);
  143.         $charvals $Chars->getCharVals($cat_id);
  144.         $prods $Prods->getProds($cat_id);
  145.         $chars_selected = [];
  146.         $charvals_selected = [];
  147.         
  148.         if ($filters) {
  149.             preg_match_all("/char(\d+)\-([\d_]+)/"$filters$m);
  150.             if (preg_match("/sale-(\w+)/"$filters$m2)) {
  151.                 $chars_selected['sale'] = $m2[1];
  152.             }
  153.             if (isset($m[1]) && count($m[1])) {
  154.                 foreach ($m[1] as $k => $v) {
  155.                     if (preg_match("/_/"$m[2][$k])) {
  156.                         preg_match_all("/(\d+)/"$m[2][$k], $mm);
  157.                         $chars_selected[$v] = $mm[0];
  158.                     } else {
  159.                         $chars_selected[$v][] = $m[2][$k];
  160.                     }
  161.                 }
  162.             }         
  163.         }
  164.         $response $this->render('block/filter.html.twig', [
  165.             'spec' => $spec,
  166.             'cat_id' => $cat_id,
  167.             'cat_intname' => $cat_intname,
  168.             'chars' => $chars,
  169.             'charvals' => $charvals,
  170.             'chars_selected' => $chars_selected,
  171.             'charvals_selected' => $charvals_selected,
  172.             'prods' => $prods,
  173.         ]);
  174.         $response Cache::http($response3600);
  175.         return $response;
  176.     }
  177.     #[Route('/{_locale}/block/charsselected/{cat_id}/{cat_intname}/filter-{filters}'name'block_chars_selected'requirements: ['_locale' => '%app.langs%'])]
  178.     #[Route('/{_locale}/block/charsselected/{spec}/{cat_id}/{cat_intname}/filter-{filters}'name'block_chars_selected_spec'requirements: ['_locale' => '%app.langs%'])]
  179.     public function charsSelectedBlock(Request $requestFilter $Filterint $cat_idstring $cat_intname ''string $filters ''string $spec ''): Response
  180.     {
  181.         $chars_selected = [];
  182.         $chars_url = [];
  183.         
  184.         if ($filters) {
  185.             preg_match_all("/char(\d+)\-([\d_]+)/"$filters$m);
  186.             if (preg_match("/sale-(\w+)/"$filters$m2)) {
  187.                 $chars_selected['sale'] = $m2[1];
  188.             }
  189.             if (isset($m[1]) && count($m[1])) {
  190.                 foreach ($m[1] as $k => $v) {
  191.                     if (preg_match("/_/"$m[2][$k])) {
  192.                         preg_match_all("/(\d+)/"$m[2][$k], $mm);
  193.                         $chars_selected[$v] = $mm[0];
  194.                     } else {
  195.                         $chars_selected[$v][] = $m[2][$k];
  196.                     }
  197.                 }
  198.             }            
  199.         }
  200.         foreach ($chars_selected as $k => $v) {
  201.             if (is_int($k)) {
  202.                 $char_id = (int) $m[1];                
  203.                 $chars_selected[$char_id] = $v;
  204.                 foreach ($v as $val) {
  205.                     $charval $this->Charvals->find($val);
  206.                     $filters $Filter->generate_filters_exclude($chars_selected$char_id$val);
  207.                     $url $this->generateUrl('prod_list_cat_filter', ['cat_id' => $cat_id'cat_intname' => $cat_intname'filters' => $filters]);
  208.                     $chars_url[$url] =  $charval->getValue();
  209.                 }                
  210.             } else {
  211.                 $char_id $k;                
  212.                 $chars_selected[$char_id] = $v;
  213.                 $val $v;
  214.                 $filters $Filter->generate_filters_exclude($chars_selected$char_id$val);                
  215.                 $url $this->generateUrl('prod_list_cat_filter', ['cat_id' => $cat_id'cat_intname' => $cat_intname'filters' => $filters]);
  216.                 $chars_url[$url] = $v;
  217.             }
  218.         }
  219.         
  220.         $response $this->render('block/chars_selected.html.twig', [
  221.             'spec' => $spec,
  222.             'cat_id' => $cat_id,
  223.             'cat_intname' => $cat_intname,
  224.             'chars_selected' => $chars_selected,
  225.             'chars_url' => $chars_url,
  226.         ]);
  227.         return $response;
  228.     }
  229.     #[Route('/{_locale}/block/timer'name'block_timer'requirements: ['_locale' => '%app.langs%'])]
  230.     public function timersBlock(): Response
  231.     {
  232.         $q "SELECT * FROM timer WHERE visible = 1 and end > ".time()." ORDER BY rand()";
  233.         $stmt $this->em->getConnection()->prepare($q);
  234.         $timers $stmt->executeQuery()->fetchAllAssociative();
  235.         $response $this->render('block/timer.html.twig', [
  236.             'timer' => @$timers[0],
  237.         ]);
  238.         $response Cache::http($response3600);
  239.         return $response;
  240.     }
  241.     #[Route('/{_locale}/api/cart/prodsblock/{spec}'name'cart_prods_block'requirements: ['_locale' => '%app.langs%''spec' => 'new|pop'])]
  242.     public function cartProdsBlock(string $spec): Response
  243.     {
  244.         //TODO Alex. Order by rand
  245.         $prods $this->em->createQuery("SELECT p FROM App\Entity\Prod p WHERE p.visible = 1 AND p.".$spec." = 1 AND (p.num > 0 or p.num2 > 0 or p.num3 > 0)")
  246.             ->setMaxResults(6)
  247.             ->getResult();
  248.         
  249.         foreach ($prods as $k => $prod) {
  250.             $prods[$k]->prices $this->ModelProd->getPrices($prod);
  251.         }
  252.         $response $this->render('cart/block/prods.html.twig', [
  253.             'prods' => $prods,
  254.             'spec' => $spec,
  255.             'cart_items' => $this->ModelCart->getCart(),
  256.         ]);
  257.         $response Cache::http($response3600);
  258.         return $response;
  259.     }
  260. }