src/Controller/SelectionController.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Otpusk\Selection;
  4. use App\Repository\Otpusk\SelectionCriteriaRepository;
  5. use App\Services\PageGenerator;
  6. use Doctrine\ORM\EntityManager;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpKernel\EventListener\AbstractSessionListener;
  11. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. class SelectionController extends AbstractController
  14. {
  15.     private $em;
  16.     private $generator;
  17.     public function __construct(EntityManager $entityManagerPageGenerator $generator)
  18.     {
  19.         $this->em $entityManager;
  20.         $this->generator $generator;
  21.     }
  22.     /**
  23.      * @Route(
  24.      *     "/select/{selectionSlug}/",
  25.      *     name="app_selection",
  26.      *     methods={"GET"},
  27.      *     priority=3
  28.      *     )
  29.      */
  30.     public function selection(Request $request$selectionSlugSelectionCriteriaRepository $selectionCriteriaRepository){
  31.         $market $request->getSession()->get('market');
  32.         $selection $this->em->getRepository(Selection::class)->findOneBySlugAndOtherCriteria($market['id'], $selectionSlug);
  33.         if(is_null($selection)) throw new NotFoundHttpException('This page not found.');
  34.         $locale $request->getLocale();
  35.         $tours $this->generator->getSelectionPage($market['code'], $selection->getId(), $locale);
  36.         if (!$tours$tours = [];
  37.         $criteries $selectionCriteriaRepository->findBySelection($selectiontrue);
  38.         $criteriesIds $this->getSortedCriteriesIds($criteries);
  39.         $tours array_intersect_key($tours$criteriesIds);
  40.         $this->sortArrayByKeysArray($tours$criteriesIds);
  41.         $seo $this->generator->getSelectionSeo($selection->translate($locale)->getTitle(), $locale);
  42.         $response $this->render('selection/index.html.twig', [
  43.             'market'    => $market,
  44.             'selection' => $selection,
  45.             'tours'     => $tours,
  46.             'seo'       => $seo,
  47.             'type'      => 'selection_item',
  48.         ]);
  49.         $response->headers->set(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER'true');
  50.         return $response;
  51.     }
  52.     /**
  53.      * @Route(
  54.      *     "/selection/sort/{entityClass}/{masOrdered}/",
  55.      *     name="app_sort_criteria",
  56.      *     methods={"POST"},
  57.      *     priority=4
  58.      *     )
  59.      */
  60.     public function sortAction($entityClass$masOrdered)
  61.     {
  62.         $masOrdered explode(','$masOrdered);
  63.         try {
  64.             $rc = new \ReflectionClass("App\\Entity\\Otpusk\\".$entityClass);
  65.         } catch (\ReflectionException $error) {
  66.             throw new \ReflectionException("The class name "$entityClass ."  cannot be reflected.");
  67.         }
  68.         foreach ($masOrdered as $key => $order) {
  69.             $item $this->em->getRepository($rc->getName())->find($order);
  70.             if($item) {
  71.                 $item->setPosition($key 1);
  72.                 $this->em->persist($item);
  73.             }
  74.         }
  75.         $this->em->flush();
  76.         return new JsonResponse([
  77.             'status' => true,
  78.         ]);
  79.     }
  80.     public function getSortedCriteriesIds($data)
  81.     {
  82.         $ids = array();
  83.         foreach($data as $item) {
  84.             $ids[$item->getId()] = $item->getId();
  85.         }
  86.         return $ids;
  87.     }
  88.     public function sortArrayByKeysArray(array &$array, array $orderArray)
  89.     {
  90.         if (!empty($array) && !empty($orderArray)) {
  91.             $array array_replace(array_flip($orderArray), $array);
  92.         }
  93.     }
  94. }