<?php
namespace App\Controller;
use App\Entity\Course;
use App\Form\AccessCodeActivationFormType;
use App\Service\CourseService;
use App\Service\CrawlModels;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class Main extends AbstractController
{
#[Route(path: '/', name: 'home')]
public function show(CrawlModels $models, Request $request, EntityManagerInterface $em): Response
{
/** @var \App\Entity\AppUser $user */
$user = $this->getUser();
$auto_show_modal = $request->query->getBoolean('access_code_activation', false);
$form = $this->createForm(AccessCodeActivationFormType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$access_code = $data['access_code'];
$course = $em->getRepository(Course::class)->findOneBy(['access_code' => $access_code]);
if ($course == null || $access_code == null) {
$this->addFlash('danger', 'Invalid access code.');
} elseif ($course->getUsers()->contains($user)) {
$this->addFlash('success', 'You already have access to this course, check it out in the navigation.');
} else {
$this->addFlash('success', 'Successful code activation. Check out the unlocked course/ kit in the navigation.');
$course->addUser($user);
$em->flush();
}
return $this->redirectToRoute('home');
}
return $this->render('main.html.twig', [
'form' => $form->createView(),
'auto_show_modal' => $auto_show_modal,
]);
}
#[Route(path: '/navbar', name: 'navbar')]
public function navbar(CourseService $course_service): Response
{
$activeCourses = $this->getUser()->getCourses()->filter(function ($course) {
return $course->isIsActive();
});
$course_array = [];
$kit_array = [];
foreach ($activeCourses as $course) {
$course_service->setContext($this->getUser(), $course);
$course_nav_info = $course_service->getNavInfo();
if ($course->isKitType()) {
$kit_array[$course->getName()] = $course_nav_info;
} else {
$course_array[$course->getName()] = $course_nav_info;
}
}
return $this->render('navbar.html.twig', [
'course_array' => $course_array ?? null,
'kit_array' => $kit_array ?? null
]);
}
}