src/Controller/CourseTopicController.php line 116

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Dto\SearchFormDto;
  4. use App\Entity\Applicant;
  5. use App\Entity\Attribute;
  6. use App\Entity\City;
  7. use App\Entity\Course;
  8. use App\Entity\CourseRegistrationRequest;
  9. use App\Entity\CourseReview;
  10. use App\Entity\CourseTopic;
  11. use App\Entity\Organizer;
  12. use App\Form\CourseFilterType;
  13. use App\Form\CourseRegistrationRequestType;
  14. use App\Form\CourseReviewType;
  15. use App\Form\CourseType;
  16. use App\Repository\CourseRepository;
  17. use App\Util\ApplicantUtil;
  18. use App\Util\AttributeUtil;
  19. use App\Util\CourseUtil;
  20. use App\Util\FoxentryUtil;
  21. use App\Util\OrganizerUtil;
  22. use Knp\Component\Pager\PaginatorInterface;
  23. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  24. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  25. use Symfony\Component\HttpFoundation\Request;
  26. use Symfony\Component\HttpFoundation\Response;
  27. use Symfony\Component\Routing\Annotation\Route;
  28. /**
  29.  * @Route("/kurzy/tema")
  30.  */
  31. class CourseTopicController extends AbstractController
  32. {
  33.     /**
  34.      * @var OrganizerUtil
  35.      */
  36.     private $organizerUtil;
  37.     /**
  38.      * @var ApplicantUtil
  39.      */
  40.     private $applicantUtil;
  41.     /**
  42.      * @var CourseUtil
  43.      */
  44.     private $courseUtil;
  45.     /**
  46.      * @var AttributeUtil
  47.      */
  48.     private $attributeUtil;
  49.     public function __construct(OrganizerUtil $organizerUtilApplicantUtil $applicantUtilCourseUtil $courseUtilAttributeUtil $attributeUtil)
  50.     {
  51.         $this->courseUtil $courseUtil;
  52.         $this->attributeUtil $attributeUtil;
  53.     }
  54.     /**
  55.      * @Route("/{slug}", name="course_topic_index", methods={"GET","POST"})
  56.      */
  57.     public function index(string $slugRequest $requestPaginatorInterface $paginatorFoxentryUtil $foxentryUtil): Response
  58.     {
  59.         $topic $this->courseUtil->getCourseTopicBySlug($slug);
  60.         if (!$topic instanceof CourseTopic) {
  61.             throw $this->createNotFoundException('Topic not found');
  62.         }
  63.         $form $this->createForm(CourseFilterType::class, null, ['topic' => $topic]);
  64.         $form->handleRequest($request);
  65.         /** @var SearchFormDto $filterData */
  66.         $filterData $form->getData();
  67.         if (!$filterData instanceof SearchFormDto) {
  68.             $filterData = new SearchFormDto();
  69.         }
  70.         $locationsResult = [];
  71.         if ($form->isSubmitted() && !empty($filterData->getLocation())) {
  72.             $locationsResult $foxentryUtil->getSearchResults($filterData->getLocation());
  73.             if (is_array($locationsResult) && count($locationsResult) > 1) {
  74.                 $filterData->setLocation(null);
  75.             }
  76.         }
  77.         if ($locationsResult instanceof City) {
  78.             $locationsResult = [];
  79.         }
  80.         $filterData->setTopics([$topic]);
  81.         $submenuGroups $this->attributeUtil->getSubmenuGroupsByTopic($topic);
  82.         $pagination $paginator->paginate(
  83.             $this->courseUtil->searchCourses($filterData), /* query NOT result */
  84.             $request->query->getInt('page'1), /*page number*/
  85.             20
  86.         /*limit per page*/
  87.         );
  88.         return $this->render('courseTopic/index.html.twig', [
  89.             'topic' => $topic,
  90.             'submenuGroups' => $submenuGroups,
  91.             'form' => $form->createView(),
  92.             'showMap' => $form->isSubmitted(),
  93.             'pagination' => $pagination,
  94.             'locations' => $locationsResult
  95.         ]);
  96.     }
  97.     /**
  98.      * @Route("/{topicSlug}/{attributeSlug}", name="course_topic_group_index", methods={"GET","POST"})
  99.      */
  100.     public function attributeGroup(string $topicSlugstring $attributeSlugRequest $requestPaginatorInterface $paginatorFoxentryUtil $foxentryUtil): Response
  101.     {
  102.         $topic $this->courseUtil->getCourseTopicBySlug($topicSlug);
  103.         if (!$topic instanceof CourseTopic) {
  104.             throw $this->createNotFoundException('Topic not found');
  105.         }
  106.         $attribute $this->attributeUtil->getAttributeByIdentifier($attributeSlug);
  107.         if (!$attribute instanceof Attribute) {
  108.             throw $this->createNotFoundException('Attribute not found');
  109.         }
  110.         $form $this->createForm(CourseFilterType::class, null);
  111.         $form->handleRequest($request);
  112.         /** @var SearchFormDto $filterData */
  113.         $filterData $form->getData();
  114.         if (!$filterData instanceof SearchFormDto) {
  115.             $filterData = new SearchFormDto();
  116.         }
  117.         $locationsResult = [];
  118.         if ($form->isSubmitted() && !empty($filterData->getLocation())) {
  119.             $locationsResult $foxentryUtil->getSearchResults($filterData->getLocation());
  120.             if (is_array($locationsResult) && count($locationsResult) > 1) {
  121.                 $filterData->setLocation(null);
  122.             }
  123.         }
  124.         if ($locationsResult instanceof City) {
  125.             $locationsResult = [];
  126.         }
  127.         $filterData->setTopics([$topic]);
  128.         $filterData->setAttributes([$attribute]);
  129.         $submenuGroups $this->attributeUtil->getSubmenuGroupsByTopic($topic);
  130.         $pagination $paginator->paginate(
  131.             $this->courseUtil->searchCourses($filterData), /* query NOT result */
  132.             $request->query->getInt('page'1), /*page number*/
  133.             20
  134.         /*limit per page*/
  135.         );
  136.         return $this->render('courseTopic/index.html.twig', [
  137.             'topic' => $topic,
  138.             'attribute' => $attribute,
  139.             'submenuGroups' => $submenuGroups,
  140.             'form' => $form->createView(),
  141.             'pagination' => $pagination,
  142.             'showMap' => true,
  143.             'courses' => $this->courseUtil->searchCourses($filterData),
  144.             'locations' => $locationsResult
  145.         ]);
  146.     }
  147. }