src/Controller/DashboardController.php line 25

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Attendee;
  4. use App\Entity\LessonProgress;
  5. use App\Entity\LoggedTime;
  6. use App\Entity\WeekGoal;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  10. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  11. use Symfony\Component\Form\Extension\Core\Type\TextType;
  12. use Symfony\Component\HttpFoundation\RedirectResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\UX\Chartjs\Builder\ChartBuilderInterface;
  17. use Symfony\UX\Chartjs\Model\Chart;
  18. class DashboardController extends AbstractController
  19. {
  20.     #[Route('/'name'app_index_redirect')]
  21.     public function indexRedirect(): RedirectResponse
  22.     {
  23.         return $this->redirectToRoute('app_dashboard', [], 301);
  24.     }
  25.     #[Route('/dashboard'name'app_dashboard')]
  26.     public function index(ChartBuilderInterface $chartBuilderRequest $requestManagerRegistry $registry): Response
  27.     {
  28.         /** @var Attendee $user */
  29.         $user $this->getUser();
  30.         if ($this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_PORTAL_ADMIN')) {
  31.             return $this->redirectToRoute('app_admin_dashboard');
  32.         }
  33.         $entityManager $registry->getManager();
  34.         $form $this->createFormBuilder()
  35.             ->add('mood'NumberType::class, ['html5' => true'label' => 'Deine Stimmung''data' => $user->getMood(), 'attr' => ['max' => 100'min' => 0'step' => 1]])
  36.             ->add('Speichern'SubmitType::class, ['attr' => ['class' => 'btn btn-modal']])
  37.             ->getForm();
  38.         $form->handleRequest($request);
  39.         if ($form->isSubmitted() && $form->isValid()) {
  40.             $data $form->getData();
  41.             $user->setMood($data['mood']);
  42.             $entityManager->flush();
  43.             return $this->redirectToRoute('app_dashboard');
  44.         }
  45.         $courses $user->getCourses()->slice(02);
  46.         $finished 0;
  47.         $inProgress 0;
  48.         $open 0;
  49.         $totalProgresses $user->getLessonProgress()->count();
  50.         if ($totalProgresses 0) {
  51.             $finished = (100 $totalProgresses) * $user->getLessonProgress()->filter(function (LessonProgress $progress) {
  52.                     return $progress->getStatus() == "finish";
  53.                 })->count();
  54.             $inProgress = (100 $totalProgresses) * $user->getLessonProgress()->filter(function (LessonProgress $progress) {
  55.                     return $progress->getStatus() == "progress";
  56.                 })->count();
  57.             $open number_format(100 $finished $inProgress0);
  58.         }
  59.         $chart $chartBuilder->createChart(Chart::TYPE_DOUGHNUT);
  60.         $chart->setData([
  61.             'datasets' => [
  62.                 [
  63.                     'label' => 'Deine Kurse',
  64.                     'backgroundColor' => ["#37c1de""#8fd0e2""#fff"],
  65.                     'data' => [number_format($finished0), number_format($inProgress0), number_format($open0),],
  66.                 ],
  67.             ],
  68.         ]);
  69.         $chart->setOptions([
  70.             'cutout' => 50,
  71.         ]);
  72.         $ownCourses $user->getCourses();
  73.         $notAssigned = [];
  74.         foreach ($user->getPortal()->getCatalogs() as $catalog) {
  75.             foreach ($catalog->getCourses() as $course) {
  76.                 if (!in_array($user$course->getAttendees()->toArray(),)) {
  77.                     $notAssigned[] = $course;
  78.                 }
  79.             }
  80.         }
  81.         $weekgoal $entityManager->getRepository(WeekGoal::class)->findOneBy(
  82.             ['attendee' => $user]
  83.         );
  84.         $weekday = (new \DateTime())->setTimestamp(strtotime('sunday last week'));
  85.         $yesterday = (new \DateTime())->setTimestamp(strtotime('yesterday'));
  86.         dump($yesterday);
  87.         $goalDays = [];
  88.         for ($x 0$x 7$x++) {
  89.             $weekday->modify('+1 day');
  90.             $lt $entityManager->getRepository(LoggedTime::class)->findOneBy(
  91.                 [
  92.                     'attendee' => $user,
  93.                     'date' => $weekday
  94.                 ]
  95.             );
  96.             if (!$lt) {
  97.                 $goalDays[$weekday->format('l')] = 0;
  98.             } else {
  99.                 $goalDays[$weekday->format('l')] = number_format($lt->getTime() / 601);
  100.             }
  101.             if ($weekday == $yesterday) {
  102.                 if ($weekgoal->{'get' $weekday->format('l')}() <= $goalDays[$weekday->format('l')]) {
  103.                     $yesterdaySuccess true;
  104.                 } else {
  105.                     $yesterdaySuccess false;
  106.                 }
  107.             }
  108.         }
  109.         dump($yesterdaySuccess);
  110.         return $this->render('dashboard/index.html.twig', [
  111.             'user' => $user,
  112.             'finished' => number_format($finished0),
  113.             'courses' => $courses,
  114.             'inProgress' => number_format($inProgress0),
  115.             'open' => $open,
  116.             'chart' => $chart,
  117.             'form' => $form,
  118.             'notAssigned' => $notAssigned,
  119.             'weekgoal' => $weekgoal,
  120.             'goalDays' => $goalDays,
  121.             'yesterdaySuccess' => $yesterdaySuccess,
  122.         ]);
  123.     }
  124. }