<?php
namespace App\Controller\Teacher;
use App\Entity\Core\Classroom\Classroom;
use App\Entity\Core\Classroom\ClassroomStudent;
use App\Entity\User\User;
use App\Services\Core\ActivityDisplayService;
use App\Services\Core\ActivityRoutingService;
use App\Services\Core\AuthService;
use App\Services\Core\EventLogger;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Yaml\Yaml;
use Symfony\Contracts\Translation\TranslatorInterface;
use App\Form\Teacher\TeacherType;
use Symfony\Component\Routing\Annotation\Route;
class DefaultController extends AbstractController
{
public function __construct(
private string $scope,
private string $rootDir,
private EntityManagerInterface $em,
private TranslatorInterface $translator
) {
}
#[Route('/teacher/index/{one}/{two}/{three}/{four}/{five}', name: 'a_ba_cus_teacher_homepage', defaults: ['one' => null, 'two' => null, 'three' => null, 'four' => null, 'five' => null])]
public function index(ActivityDisplayService $activityDisplayService, ActivityRoutingService $activityRoutingService): Response
{
/** @var User $teacher */
$teacher = $this->getUser();
$config = Yaml::parseFile($this->rootDir . '/config/' . $this->scope . '.yml');
$props = [
'brand' => $this->translator->trans("brand", [], $this->scope),
'activityDisplays' => $activityDisplayService->getFull($teacher),
'activityCreateRoutes' => $activityRoutingService->getCreateRoutes(),
'demos' => $config["demo"] ?? null,
'userId' => $teacher->getId(),
'reactRoutes' => $config["react_routes"]["teacher"]["index"],
"videoCollectionSegments" => $config["video_collection_segments"] ?? null,
];
return $this->render('Teacher/Default/index.html.twig', [
'props' => $props,
]);
}
#[Route('/teacher/help', name: 'teacher_help')]
public function help(EventLogger $eventLogger): Response
{
/** @var User $teacher */
$teacher = $this->getUser();
$eventLogger->log('teacher_clicks_helppage', $teacher);
return $this->render('Teacher/Default/help.html.twig');
}
/**
* @return RedirectResponse|Response
*/
#[Route('/teacher/profile', name: 'teacher_edit_profile')]
public function editProfile(AuthService $authService, Request $request)
{
$classroomRepo = $this->em->getRepository(Classroom::class);
$studentRepo = $this->em->getRepository(ClassroomStudent::class);
/** @var User $teacher */
$teacher = $this->getUser();
$form = $this->createForm(TeacherType::class, $teacher);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$submittedData = $request->request->get('teacher');
$teacherDemoClassroom = $classroomRepo->getTeacherDemoClassroom($teacher);
if ($teacherDemoClassroom) {
$classroomStudents = $studentRepo->findStudentsInClassroom($teacherDemoClassroom->getId());
foreach ($classroomStudents as $classroomStudent) {
$student = $classroomStudent->getStudent();
if ($student->isDemo()) {
$student->setInstitution($teacher->getInstitution());
if( isset( $submittedData['class_level'] ) ){
$student->setClassLevel( (int)$submittedData['class_level'] );
}
}
}
}
$this->em->flush();
$this->addFlash(
'notice',
$this->translator->trans('Din brugerprofil er blevet opdateret 👍')
);
return $this->redirectToRoute('teacher_edit_profile');
}
return $this->render('Teacher/Default/edit_profile.html.twig', [
'form' => $form->createView(),
]);
}
}