src/Controller/userController/ProduktDetailsController.php line 76

Open in your IDE?
  1. <?php
  2. namespace App\Controller\userController;
  3. use App\Controller\api\FirebaseController;
  4. use App\Controller\api\GoogleMapsController;
  5. use App\Controller\basisController\UserBasisController;
  6. use App\Controller\emailVersandController\MailsWarteschleifeController;
  7. use App\Controller\oAuthLoginController\LoginController;
  8. use App\Controller\seminarController\SeminarController;
  9. use App\Entity\SchulungBeobachten;
  10. use App\Entity\SchulungBewertungen;
  11. use App\Entity\SchulungKommentarAntworten;
  12. use App\Entity\SchulungKommentare;
  13. use App\Entity\UserEmpfehlungen;
  14. use App\Entity\UserFavoriten;
  15. use App\Entity\UserNotification;
  16. use App\Repository\BuchungenRepository;
  17. use App\Repository\BuchungenSeminareRepository;
  18. use App\Repository\BuchungenSeminareTeilnehmerRepository;
  19. use App\Repository\DozentRepository;
  20. use App\Repository\FirebaseNotificationRepository;
  21. use App\Repository\FirmenprofilRepository;
  22. use App\Repository\KonfiguratorThemenRepository;
  23. use App\Repository\SchulungBeobachtenRepository;
  24. use App\Repository\SchulungBewertungenRepository;
  25. use App\Repository\SchulungenRepository;
  26. use App\Repository\SchulungKommentareRepository;
  27. use App\Repository\SchulungsArtRepository;
  28. use App\Repository\SchulungsfilterungRepository;
  29. use App\Repository\SchulungsTermineRepository;
  30. use App\Repository\UserEmpfehlungenRepository;
  31. use App\Repository\UserNotificationRepository;
  32. use App\Repository\UserProfilRepository;
  33. use App\Repository\UserRepository;
  34. use Kreait\Firebase\Contract\Messaging;
  35. use Psr\Log\LoggerInterface;
  36. use Symfony\Component\HttpFoundation\JsonResponse;
  37. use App\Repository\UserFavoritenRepository;
  38. use App\Repository\ZielgruppeRepository;
  39. use Doctrine\ORM\EntityManagerInterface;
  40. use Symfony\Component\HttpFoundation\Request;
  41. use Symfony\Component\HttpFoundation\Response;
  42. use Symfony\Component\Routing\Annotation\Route;
  43. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  44. use Symfony\Contracts\HttpClient\HttpClientInterface;
  45. class ProduktDetailsController extends UserBasisController
  46. {
  47.     #[Route('/user/produkt/details/{id}'name'produkt_details')]
  48.     public function index(Request                      $request$id,
  49.                           SchulungenRepository         $schulungenRepository,
  50.                           SchulungsfilterungRepository $schulungsfilterungRepository,
  51.                           SchulungBeobachtenRepository $schulungBeobachtenRepository,
  52.                           ZielgruppeRepository         $zielgruppeRepository,
  53.                           KonfiguratorThemenRepository $konfiguratorThemenRepository,
  54.                           SchulungsArtRepository       $schulungsArtRepository,
  55.                           SchulungsTermineRepository   $schulungsTermineRepository,
  56.                           UserEmpfehlungenRepository   $userEmpfehlungenRepository,
  57.                           FirmenprofilRepository       $firmenprofilRepository,
  58.                           UserProfilRepository         $userProfilRepository,
  59.                           UserFavoritenRepository      $userFavoritenRepository,
  60.                           BuchungenRepository          $buchungenRepository,
  61.                           GoogleMapsController         $googleMapsController,
  62.                           UserRepository               $userRepository,
  63.                           TokenStorageInterface        $tokenStorage,
  64.                           HttpClientInterface          $client,
  65.                           SeminarController            $seminarController): Response
  66.     {
  67.         $userId $this->getUser()?->getId();
  68.         if (strlen($request->query->get('id')) > 0) {
  69.             //Benutzer vom CELSEO-Intranet einloggen
  70.             $jsonData = [];
  71.             $jsonData['id'] = $request->query->get('id');
  72.             $jsonData['token'] = $request->query->get('token');
  73.             $jsonData['campusId'] = $request->query->get('campusId');
  74.             $intranetResponse $client->request('POST'$_ENV['CELSEO_INTRANET_API_URL'] . 'login/kontrolle', [
  75.                 'headers' => [
  76.                     'Content-Type' => 'application/json',
  77.                     'AuthenticationToken' => $_ENV['CELSEO_INTRANET_API_KEY']
  78.                 ],
  79.                 'json' => $jsonData
  80.             ])->toArray(false);
  81.             if ($intranetResponse['ergebnis'] != 0) {
  82.                 $user $userRepository->findOneBy(['id' => $intranetResponse['ergebnis']]);
  83.                 if ($user != null) {
  84.                     $loginController = new LoginController($userFavoritenRepository);
  85.                     $loginController->loginUser($user$tokenStorage$request);
  86.                     $userId $this->getUser()?->getId();
  87.                 }
  88.             }
  89.         }
  90.         $offeneBuchung false;
  91.         if ($userId != null) {
  92.             $buchungen $buchungenRepository->findBy(['user' => $this->getUser(), 'bezahlstatus' => 0]);
  93.             foreach ($buchungen as $buchung) {
  94.                 foreach ($buchung->getBuchungenSeminare() as $seminar) {
  95.                     if ($seminar->getTermin()->getSchulung()->getId() == $id) {
  96.                         $offeneBuchung true;
  97.                     }
  98.                 }
  99.             }
  100.         }
  101.         $sessionId $this->session->getId();
  102.         $favoriten null;
  103.         if ($userId == null) {
  104.             $favoriten $userFavoritenRepository->findOneBy(['session_id' => $sessionId'schulung' => $id]);
  105.         } else {
  106.             $favoriten $userFavoritenRepository->findOneBy(['user_id' => $userId'schulung' => $id]);
  107.         }
  108.         $schulung $schulungenRepository->findOneBy(['id' => $id]);
  109.         if ($schulung == null) {
  110.             return $this->redirectToRoute('user_start');
  111.         }
  112.         if ($schulung->getNurCelsisten() == 4) {
  113.             $zugangPrivatschulung false;
  114.             if (strlen($request->query->get('guid')) > && $request->query->get('guid') == $schulung->getImportFehler()) {
  115.                 $zugangPrivatschulung true;
  116.             }
  117.             if (!$zugangPrivatschulung) {
  118.                 return $this->redirectToRoute('user_start');
  119.             }
  120.         }
  121.         $firma $this->getUser()?->getFirmenprofil();
  122.         $empfehlung null;
  123.         if ($firma != null) {
  124.             $empfehlung $userEmpfehlungenRepository->findOneBy(['firma' => $firma'schulung_id' => $schulung->getId(), 'user' => $this->getUser(), 'buchungen_id' => null]);
  125.         }
  126.         $userIDs = [];
  127.         $userIDs[] = $schulung->getErstellerUserId();
  128.         if (count($schulung->getSchulungKommentare()) > 0) {
  129.             foreach ($schulung->getSchulungKommentare() as $kommentare) {
  130.                 if ($kommentare->getUserId() != null) {
  131.                     $userIDs[] = $kommentare->getUserId();
  132.                 }
  133.                 if (count($kommentare->getAntworten()) > 0) {
  134.                     foreach ($kommentare->getAntworten() as $antwort) {
  135.                         $userIDs[] = $antwort->getUserId();
  136.                     }
  137.                 }
  138.             }
  139.         }
  140.         $sterne = [00000];
  141.         $anzahlBewertungen count($schulung->getBewertungen());
  142.         $durchschnittBewertungen 0;
  143.         if ($anzahlBewertungen 0) {
  144.             foreach ($schulung->getBewertungen() as $bewertung) {
  145.                 $userIDs[] = $bewertung->getUserId();
  146.                 $sterne[$bewertung->getSterne() - 1] = $sterne[$bewertung->getSterne() - 1] + 1;
  147.             }
  148.             $durchschnittBewertungen = (($sterne[0] * 1) + ($sterne[1] * 2) + ($sterne[2] * 3) + ($sterne[3] * 4) + ($sterne[4] * 5)) / $anzahlBewertungen;
  149.         }
  150.         $schulungErstellerId $schulung->getErstellerFirmenId();
  151.         $meineFirmenId $this->getUser()?->getFirmenProfil()?->getId();
  152.         // Restanzahl Teilnehmer herausfinden
  153.         $freiePlaetze = [];
  154.         foreach ($schulung->getSchulungstermine() as $termin) {
  155.             $tmpFreiePlaetze = [];
  156.             $tmpFreiePlaetze['freiePlaetze'] = $seminarController->freie_plaetze_ermitteln($termin->getId());
  157.             $tmpFreiePlaetze['terminId'] = $termin->getId();
  158.             $freiePlaetze[] = $tmpFreiePlaetze;
  159.         }
  160.         $meineThemengebiete = [];
  161.         $arrayThemengebiete $schulung->getSuchfilter();
  162.         if ($arrayThemengebiete != null) {
  163.             $arrayThemengebiete json_decode($arrayThemengebietetrue);
  164.             foreach ($arrayThemengebiete['filter'] as $arrayThemengebiet) {
  165.                 $meineThemengebiete[] = $arrayThemengebiet['t'];
  166.             }
  167.             $meineThemengebiete array_unique($meineThemengebiete);
  168.         }
  169.         $meineZielgruppen = [];
  170.         $arrayZielgruppen $schulung->getSuchfilter();
  171.         if ($arrayZielgruppen != null) {
  172.             $arrayZielgruppen json_decode($arrayZielgruppentrue);
  173.             foreach ($arrayZielgruppen['filter'] as $arrayZielgruppe) {
  174.                 $meineZielgruppen[] = $arrayZielgruppe['z'];
  175.             }
  176.             $meineZielgruppen array_unique($meineZielgruppen);
  177.         }
  178.         $allgemeinerAnmeldeschluss null;
  179.         if ($schulung->getSchulungsart()->getId() == 4) {
  180.             $termine $schulungsTermineRepository->findBy(['schulung' => $schulung]);
  181.             foreach ($termine as $termin) {
  182.                 if ($termin->getAnmeldeschluss() != null) {
  183.                     $allgemeinerAnmeldeschluss $termin->getAnmeldeschluss();
  184.                 }
  185.             }
  186.         }
  187.         $entfernungen = [];
  188.         if ($this->getUser()?->getUserProfil() != null) {
  189.             foreach ($schulung->getSchulungstermine() as $termin) {
  190.                 if ($termin->getGoogleLen() != null) {
  191.                     $lat 0;
  192.                     $len 0;
  193.                     if ($this->getUser()->getUserProfil()->getGoogleLat() != null) {
  194.                         $lat $this->getUser()->getUserProfil()->getGoogleLat();
  195.                         $len $this->getUser()->getUserProfil()->getGoogleLen();
  196.                     } else {
  197.                         if ($this->getUser()->getFirmenprofil() != null && $this->getUser()->getFirmenprofil()->getGoogleLat() != null) {
  198.                             $lat $this->getUser()->getFirmenprofil()->getGoogleLat();
  199.                             $len $this->getUser()->getFirmenprofil()->getGoogleLen();
  200.                         }
  201.                     }
  202.                     if ($lat != 0) {
  203.                         $entfernungInMeter $googleMapsController->vincentyGreatCircleDistance($lat$len$termin->getGoogleLat(), $termin->getGoogleLen());
  204.                         $entfernung = [];
  205.                         $entfernung['terminId'] = $termin->getId();
  206.                         $entfernung['km'] = round($entfernungInMeter 10002);
  207.                         $entfernungen[] = $entfernung;
  208.                     }
  209.                 }
  210.             }
  211.         }
  212.         $zurueckLink null;
  213.         if (strlen($request->query->get('back')) > 0) {
  214.             $zurueckLink $request->query->get('back');
  215.         }
  216.         $schulungBeobachten $schulungBeobachtenRepository->findOneBy(['schulung' => $schulung'user' => $this->getUser()]);
  217.         $schulungsfilterungen $schulungsfilterungRepository->findAll();
  218.         $vorschlagRang = [];
  219.         $vorschlagFirmenIDs = [];
  220.         $vorschlagSchulungenIDs = [];
  221.         $eigeneSuchbegriffe = [];
  222.         $dbSuchbegriffe $schulung->getSuchbegriffe();
  223.         $arrSuchbegriffe explode(','$dbSuchbegriffe);
  224.         foreach ($arrSuchbegriffe as $suchbegriff) {
  225.             if (strlen(trim($suchbegriff) > 1)) {
  226.                 $eigeneSuchbegriffe[] = trim($suchbegriff);
  227.             }
  228.         }
  229.         foreach ($schulungsfilterungen as $schulungsfilterung) {
  230.             if ($schulungsfilterung->getSchulung()->getId() != $id) {
  231.                 $anzahlZuWenigTrefer 0;
  232.                 if ($schulungsfilterung->getSchulung()->getErstellerFirmenId() == $schulung->getErstellerFirmenId()) {
  233.                     $anzahlZuWenigTrefer 1;
  234.                 }
  235.                 $vorschlagSuchbegriffe $eigeneSuchbegriffe;
  236.                 $dbSuchbegriffe $schulungsfilterung->getSuchbegriffe();
  237.                 $arrSuchbegriffe explode(','$dbSuchbegriffe);
  238.                 foreach ($arrSuchbegriffe as $suchbegriff) {
  239.                     if (strlen(trim($suchbegriff) > 1)) {
  240.                         $vorschlagSuchbegriffe[] = trim($suchbegriff);
  241.                     }
  242.                 }
  243.                 $kontrolleSuchbegriffe array_count_values($vorschlagSuchbegriffe);
  244.                 $anzahlGesamt 0;
  245.                 foreach ($kontrolleSuchbegriffe as $key => $value) {
  246.                     $anzahlGesamt $anzahlGesamt $value 1;
  247.                 }
  248.                 if ($anzahlGesamt $anzahlZuWenigTrefer) {
  249.                     $tmpVorschlagRang['schulungsId'] = $schulungsfilterung->getSchulung()->getId();
  250.                     $tmpVorschlagRang['treffer'] = $anzahlGesamt;
  251.                     $vorschlagRang[] = $tmpVorschlagRang;
  252.                     $vorschlagFirmenIDs[] = $schulungsfilterung->getSchulung()->getErstellerFirmenId();
  253.                     $vorschlagSchulungenIDs[] = $schulungsfilterung->getSchulung()->getId();
  254.                 }
  255.             }
  256.         }
  257.         $vorschlagFirmenIDs array_unique($vorschlagFirmenIDs);
  258.         $vorschlagSchulungenIDs array_unique($vorschlagSchulungenIDs);
  259.         $vorschlaege $schulungenRepository->findBy(['id' => $vorschlagSchulungenIDs]);
  260.         $vorschlaegeFirmen $firmenprofilRepository->findBy(['id' => $vorschlagFirmenIDs]);
  261.         if ($schulung->getFreigabe() == or $schulungErstellerId == $meineFirmenId or in_array("ROLE_CELSEO_MASTERADMIN"$this->getUser()->getRoles())) {
  262.             return $this->render('user/produkt_details/index.html.twig', [
  263.                 'schulung' => $schulung,
  264.                 'schulungBeobachten' => $schulungBeobachten,
  265.                 'allgemeinerAnmeldeschluss' => $allgemeinerAnmeldeschluss,
  266.                 'sterne' => $sterne,
  267.                 'entfernungen' => $entfernungen,
  268.                 'durchschnitt' => $durchschnittBewertungen,
  269.                 'favoriten' => $favoriten,
  270.                 'zielgruppen' => $zielgruppeRepository->findAll(),
  271.                 'meine_zielgruppen' => $meineZielgruppen,
  272.                 'themengebiete' => $konfiguratorThemenRepository->findAll(),
  273.                 'meine_themengebiete' => $meineThemengebiete,
  274.                 'schulungsarten' => $schulungsArtRepository->findAll(),
  275.                 'freiePlaetze' => $freiePlaetze,
  276.                 'userProfile' => $userProfilRepository->findBy(['user' => $userIDs]),
  277.                 'firmenprofil' => $firmenprofilRepository->findOneBy(['id' => $schulung->getErstellerFirmenId()]),
  278.                 'id' => $id,
  279.                 'offeneBuchung' => $offeneBuchung,
  280.                 'zurueckLink' => $zurueckLink,
  281.                 'empfehlung' => $empfehlung,
  282.                 'vorschlaege' => $vorschlaege,
  283.                 'vorschlaegeFirmen' => $vorschlaegeFirmen,
  284.                 'vorschlagRang' => $vorschlagRang,
  285.             ]);
  286.         }
  287.         return $this->redirectToRoute('user_start', [], Response::HTTP_SEE_OTHER);
  288.     }
  289.     #[Route('/user/produkt/details/termine/{id}'name'produkt_details_termine'methods: ['GET'])]
  290.     public function produkt_details_termine($id,
  291.                                             SchulungenRepository $schulungenRepository,
  292.                                             SchulungsTermineRepository $schulungsTermineRepository,
  293.                                             GoogleMapsController $googleMapsController,
  294.                                             UserEmpfehlungenRepository $userEmpfehlungenRepository,
  295.                                             SeminarController $seminarController): Response
  296.     {
  297.         $schulung $schulungenRepository->findOneBy(['id' => $id]);
  298.         $termine $schulungsTermineRepository->findBy(['schulung' => $schulung], ['von' => 'ASC']);
  299.         $entfernungen = [];
  300.         // Restanzahl Teilnehmer herausfinden
  301.         $freiePlaetze = [];
  302.         foreach ($termine as $termin) {
  303.             $tmpFreiePlaetze = [];
  304.             $tmpFreiePlaetze['freiePlaetze'] = $seminarController->freie_plaetze_ermitteln($termin->getId());
  305.             $tmpFreiePlaetze['terminId'] = $termin->getId();
  306.             $freiePlaetze[] = $tmpFreiePlaetze;
  307.             if ($this->getUser()?->getUserProfil() != null) {
  308.                 if ($termin->getGoogleLen() != null) {
  309.                     $lat 0;
  310.                     $len 0;
  311.                     if ($this->getUser()->getUserProfil()->getGoogleLat() != null) {
  312.                         $lat $this->getUser()->getUserProfil()->getGoogleLat();
  313.                         $len $this->getUser()->getUserProfil()->getGoogleLen();
  314.                     } else {
  315.                         if ($this->getUser()->getFirmenprofil() != null && $this->getUser()->getFirmenprofil()->getGoogleLat() != null) {
  316.                             $lat $this->getUser()->getFirmenprofil()->getGoogleLat();
  317.                             $len $this->getUser()->getFirmenprofil()->getGoogleLen();
  318.                         }
  319.                     }
  320.                     if ($lat != 0) {
  321.                         $entfernungInMeter $googleMapsController->vincentyGreatCircleDistance($lat$len$termin->getGoogleLat(), $termin->getGoogleLen());
  322.                         $entfernung = [];
  323.                         $entfernung['terminId'] = $termin->getId();
  324.                         $entfernung['km'] = round($entfernungInMeter 10002);
  325.                         $entfernungen[] = $entfernung;
  326.                     }
  327.                 }
  328.             }
  329.         }
  330.         $firma $this->getUser()?->getFirmenprofil();
  331.         $empfehlung null;
  332.         if ($firma != null) {
  333.             $empfehlung $userEmpfehlungenRepository->findOneBy(['firma' => $firma'schulung_id' => $schulung->getId(), 'user' => $this->getUser(), 'buchungen_id' => null]);
  334.         }
  335.         return $this->render('user/produkt_details/schulung_alle_termine.html.twig', [
  336.             'termine' => $termine,
  337.             'freiePlaetze' => $freiePlaetze,
  338.             'empfehlung' => $empfehlung,
  339.             'entfernungen' => $entfernungen,
  340.         ]);
  341.     }
  342.     #[Route('/user/produkt/details/schulung_beobachten/{id}'name'produkt_details_schulung_beobachten')]
  343.     public function produkt_details_schulung_beobachten($idSchulungenRepository $schulungenRepository,
  344.                                                         SchulungBeobachtenRepository $schulungBeobachtenRepository,
  345.                                                         EntityManagerInterface $entityManager): Response
  346.     {
  347.         $schulung $schulungenRepository->findOneBy(['id' => $id]);
  348.         if ($schulung != null) {
  349.             $schulungBeobachten $schulungBeobachtenRepository->findOneBy(['user' => $this->getUser(), 'schulung' => $schulung]);
  350.             if ($schulungBeobachten == null && $this->getUser()?->getId() != null) {
  351.                 $schulungBeobachten = new SchulungBeobachten();
  352.                 $schulungBeobachten->setUser($this->getUser());
  353.                 $schulungBeobachten->setSchulung($schulung);
  354.                 $entityManager->persist($schulungBeobachten);
  355.                 $entityManager->flush();
  356.             }
  357.         }
  358.         $returnData["error"] = false;
  359.         return new JsonResponse($returnData);
  360.     }
  361.     #[Route('/user/produkt/details/schulung_beobachten_loeschen/{id}'name'produkt_details_schulung_beobachten_loeschen')]
  362.     public function produkt_details_schulung_beobachten_loeschen($idSchulungenRepository $schulungenRepository,
  363.                                                                  SchulungBeobachtenRepository $schulungBeobachtenRepository,
  364.                                                                  EntityManagerInterface $entityManager): Response
  365.     {
  366.         $schulung $schulungenRepository->findOneBy(['id' => $id]);
  367.         if ($schulung != null) {
  368.             $schulungBeobachten $schulungBeobachtenRepository->findOneBy(['user' => $this->getUser(), 'schulung' => $schulung]);
  369.             if ($schulungBeobachten != null) {
  370.                 $entityManager->remove($schulungBeobachten);
  371.                 $entityManager->flush();
  372.             }
  373.         }
  374.         $returnData["error"] = false;
  375.         return new JsonResponse($returnData);
  376.     }
  377.     #[Route('/user/produkt/details/fremdschulung/counter/{id}'name'user_produkt_fremdschulung_counter')]
  378.     public function user_produkt_fremdschulung_counter($idSchulungenRepository $schulungenRepository,
  379.                                                        EntityManagerInterface $entityManager): Response
  380.     {
  381.         $schulung $schulungenRepository->findOneBy(['id' => $id]);
  382.         if ($schulung != null && $schulung->getFremdanbieterStatus() == 9) {
  383.             $schulung->setFremdlinkCounter($schulung->getFremdlinkCounter() + 1);
  384.             $entityManager->persist($schulung);
  385.             $entityManager->flush();
  386.         }
  387.         $returnData["error"] = false;
  388.         return new JsonResponse($returnData);
  389.     }
  390.     #[Route('/user/produkt/details/warenkorb/celseo/anfrage'name'user_produkt_warenkorb_celseo_anfrage')]
  391.     public function user_produkt_warenkorb_celseo_anfrage(Request                $request,
  392.                                                           BuchungenRepository    $buchungenRepository,
  393.                                                           EntityManagerInterface $entityManager): Response
  394.     {
  395.         $returnData["error"] = true;
  396.         $buchung $buchungenRepository->findOneBy(['id' => $request->get('buchungId')]);
  397.         if ($buchung != null && $buchung->getUser()->getId() == $this->getUser()?->getId()) {
  398.             if (strlen($request->get('buchungAnfrageCelseoText')) > 3) {
  399.                 $buchung->setAblehnungstext($request->get('buchungAnfrageCelseoText'));
  400.             } else {
  401.                 $buchung->setAblehnungstext(null);
  402.             }
  403.             $entityManager->persist($buchung);
  404.             $entityManager->flush();
  405.             $returnData["error"] = false;
  406.         }
  407.         return new JsonResponse($returnData);
  408.     }
  409.     #[Route('/user/produkt/details/warenkorb/{terminId}'name'produkt_details_warenkorb'methods: ['GET'])]
  410.     public function produkt_details_warenkorb($terminId,
  411.                                               SchulungsTermineRepository $schulungsTermineRepository,
  412.                                               UserRepository $userRepository,
  413.                                               SchulungsArtRepository $schulungsArtRepository,
  414.                                               BuchungenSeminareTeilnehmerRepository $buchungenSeminareTeilnehmerRepository,
  415.                                               SeminarController $seminarController): Response
  416.     {
  417.         $userID $this->getUser()?->getId();
  418.         $mitgliederIDs = [];
  419.         $stornierteMitgliederIDs = [];
  420.         $termin $schulungsTermineRepository->findOneBy(['id' => $terminId]);
  421.         $firmenmitglieder $userRepository->findBy(['firmen_profil' => $this->getUser()?->getFirmenProfil()?->getId()]);
  422.         $freiePlaetze $seminarController->freie_plaetze_ermitteln($termin->getId());
  423.         $stornoBis null;
  424.         $terminVon = clone $termin->getVon();
  425.         if ($termin->getSchulung()->getSchulungsart()->getId() != 1) {
  426.             if ($termin->getSchulung()->getSchulungsart()->getId() == 4) {
  427.                 $stornoBis $termin->getSchulung()->getSeminarreiheStartdatum()->modify('-' $termin->getSchulung()->getStornoInTagen() * 24 ' hours');
  428.             } else {
  429.                 $stornoBis $terminVon->modify('-' $termin->getSchulung()->getStornoInTagen() * 24 ' hours');
  430.             }
  431.         }
  432.         if ($firmenmitglieder == null) {
  433.             $mitgliederIDs[] = $userID;
  434.         } else {
  435.             foreach ($firmenmitglieder as $firmenmitglied) {
  436.                 $mitgliederIDs[] = $firmenmitglied->getId();
  437.             }
  438.         }
  439.         $buchungseminareTeilnehmer $buchungenSeminareTeilnehmerRepository->findBy(['user' => $mitgliederIDs]);
  440.         foreach ($buchungseminareTeilnehmer as $buchung) {
  441.             if ($buchung->getBuchungenSeminar()->getTermin()->getId() == $terminId) {
  442.                 if ($buchung->getBuchungenSeminar()->getBuchung()->getBezahlstatus() >= 30) {
  443.                     if ($buchung->getStatus() != 0) {
  444.                         $stornierteMitgliederIDs[] = $buchung->getUser()->getId();
  445.                     }
  446.                     $mitgliederIDs array_diff($mitgliederIDs, [$buchung->getUser()->getId()]);
  447.                 }
  448.             }
  449.         }
  450.         $kostenlosesOnDemand false;
  451.         if ($termin->getSchulung()->getSchulungsart()->getId() == && $termin->getSchulung()->getPreis() == 0) {
  452.             $kostenlosesOnDemand true;
  453.         }
  454.         return $this->render('user/produkt_details/schulung_warenkorb.html.twig', [
  455.             'termin' => $termin,
  456.             'stornoBis' => $stornoBis,
  457.             'stornierteMitgliederIDs' => $stornierteMitgliederIDs,
  458.             'firmenmitglieder' => $firmenmitglieder,
  459.             'mitgliederOhneBuchung' => $mitgliederIDs,
  460.             'schulungsarten' => $schulungsArtRepository->findAll(),
  461.             'freiePlaetze' => $freiePlaetze,
  462.             'kostenlosesOnDemand' => $kostenlosesOnDemand,
  463.         ]);
  464.     }
  465.     #[Route('/user/produkt/details/empfehlen/{id}'name'produkt_details_empfehlen'methods: ['GET'])]
  466.     public function produkt_details_empfehlen($id,
  467.                                               SchulungenRepository $schulungenRepository,
  468.                                               SchulungsTermineRepository $schulungsTermineRepository,
  469.                                               UserRepository $userRepository,
  470.                                               SeminarController $seminarController,
  471.                                               BuchungenSeminareTeilnehmerRepository $buchungenSeminareTeilnehmerRepository): Response
  472.     {
  473.         $firmenmitglieder null;
  474.         $mitgliederIDs = [];
  475.         $schulung $schulungenRepository->findOneBy(['id' => $id]);
  476.         if ($schulung != null && $this->getUser()?->getFirmenprofil() != null && in_array("ROLE_FIRMA_BUCHUNGEN"$this->getUser()->getRoles())) {
  477.             $firmenmitglieder $userRepository->findBy(['firmen_profil' => $this->getUser()?->getFirmenProfil()?->getId()]);
  478.             foreach ($firmenmitglieder as $firmenmitglied) {
  479.                 if ($firmenmitglied->getId() != $this->getUser()->getId())
  480.                     $mitgliederIDs[] = $firmenmitglied->getId();
  481.             }
  482.             $buchungseminareTeilnehmer $buchungenSeminareTeilnehmerRepository->findBy(['user' => $mitgliederIDs]);
  483.             foreach ($buchungseminareTeilnehmer as $teilnehmer) {
  484.                 if ($teilnehmer->getBuchungenSeminar()->getTermin()->getSchulung()->getId() == $id) {
  485.                     if ($teilnehmer->getBuchungenSeminar()->getBuchung()->getBezahlstatus() >= 30) {
  486.                         $mitgliederIDs array_diff($mitgliederIDs, [$teilnehmer->getUser()->getId()]);
  487.                     }
  488.                 }
  489.             }
  490.         }
  491.         $termine $schulungsTermineRepository->findBy(['schulung' => $schulung], ['von' => 'ASC']);
  492.         $freiePlaetze = [];
  493.         foreach ($termine as $termin) {
  494.             $tmpFreiePlaetze = [];
  495.             $tmpFreiePlaetze['freiePlaetze'] = $seminarController->freie_plaetze_ermitteln($termin->getId());
  496.             $tmpFreiePlaetze['terminId'] = $termin->getId();
  497.             $freiePlaetze[] = $tmpFreiePlaetze;
  498.         }
  499.         return $this->render('user/produkt_details/schulung_empfehlen.html.twig', [
  500.             'schulung' => $schulung,
  501.             'termine' => $termine,
  502.             'freiePlaetze' => $freiePlaetze,
  503.             'firmenmitglieder' => $firmenmitglieder,
  504.             'mitgliederOhneBuchung' => $mitgliederIDs,
  505.         ]);
  506.     }
  507.     #[Route('/user/produkt/details/empfehlungen_senden/{id}'name'produkt_details_empfehlungen_senden')]
  508.     public function produkt_details_empfehlungen_senden(Request                        $request$id,
  509.                                                         SchulungenRepository           $schulungenRepository,
  510.                                                         UserRepository                 $userRepository,
  511.                                                         UserEmpfehlungenRepository     $empfehlungenRepository,
  512.                                                         MailsWarteschleifeController   $mailsWarteschleifeController,
  513.                                                         FirebaseController             $firebaseController,
  514.                                                         Messaging                      $messaging,
  515.                                                         FirebaseNotificationRepository $firebaseNotificationRepository,
  516.                                                         EntityManagerInterface         $entityManager): Response
  517.     {
  518.         $schulung $schulungenRepository->findOneBy(['id' => $id]);
  519.         $teilnehmers json_decode($request->get('arrayTeilnehmer'), true);
  520.         $datum = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
  521.         if ($schulung != null && count($teilnehmers) > && in_array("ROLE_FIRMA_BUCHUNGEN"$this->getUser()->getRoles())) {
  522.             $firmenmitglieder $userRepository->findBy(['firmen_profil' => $this->getUser()->getFirmenProfil()]);
  523.             foreach ($teilnehmers as $teilnehmer) {
  524.                 foreach ($firmenmitglieder as $firmenmitglied) {
  525.                     if ($firmenmitglied->getId() == $teilnehmer) {
  526.                         $terminIDs $request->get('terminIDs');
  527.                         if ($terminIDs == '-1') {
  528.                             $terminIDs null;
  529.                         }
  530.                         $empfehlung $empfehlungenRepository->findOneBy(['user' => $firmenmitglied'schulung_id' => $id'von_user_id' => $this->getUser()->getId()]);
  531.                         if ($empfehlung == null) {
  532.                             $empfehlung = new UserEmpfehlungen();
  533.                         }
  534.                         $empfehlung->setUser($firmenmitglied);
  535.                         $empfehlung->setFirma($this->getUser()->getFirmenProfil());
  536.                         $empfehlung->setSchulungId($id);
  537.                         $empfehlung->setVonUserId($this->getUser()->getId());
  538.                         $empfehlung->setVonUserName($this->getUser()->getUserProfil()->getVorname() . ' ' $this->getUser()->getUserProfil()->getNachname());
  539.                         $empfehlung->setDatum($datum);
  540.                         $empfehlung->setTageAktiv(30);
  541.                         $empfehlung->setTerminIds($terminIDs);
  542.                         $entityManager->persist($empfehlung);
  543.                         $entityManager->flush();
  544.                         $mailsWarteschleifeController->insertMail([
  545.                             'preheader' => 'Schulungs-Empfehlung',
  546.                             'mailempfaenger' => $firmenmitglied->getUserProfil()->getVorname() . ' ' $firmenmitglied->getUserProfil()->getNachname(),
  547.                             'empfohlenVon' => $this->getUser()->getUserProfil()->getVorname() . ' ' $this->getUser()->getUserProfil()->getNachname(),
  548.                             'firmenname' => $this->getUser()->getFirmenProfil()->getFirmenname(),
  549.                             'schulung' => $schulung->getId(),
  550.                             'user' => $firmenmitglied->getId(),
  551.                         ], $_ENV["MAILER_SENDER_NO_REPLY"],
  552.                             $firmenmitglied->getUserProfil()->getMailversand(),
  553.                             'handwerkXcampus: Schulungs-Empfehlung',
  554.                             'emails/schulungen_empfehlung.html.twig',
  555.                             'Schulungs-Empfehlung'0,
  556.                             $firmenmitglied);
  557.                         $notificationEmpfaenger = [$firmenmitglied->getId()];
  558.                         $notificationTitle 'Schulungs-Empfehlung';
  559.                         $notificationVorschau $this->getUser()->getFirmenProfil()->getFirmenname() . ' empfielt dir eine Schulung.';
  560.                         $notificationBody $this->getUser()->getFirmenProfil()->getFirmenname() . ' empfielt dir eine Schulung.' chr(10) . 'Empfohlen von ' $this->getUser()->getUserProfil()->getVorname() . ' ' $this->getUser()->getUserProfil()->getNachname();
  561.                         $notificationLink $_ENV["WEBSITE_URL"] . '/user/firma/startseite/0/empfehlungen';
  562.                         $firebaseController->firebaseNotificationSenden('dokumente'$notificationEmpfaenger$notificationTitle$notificationVorschau$notificationBody$notificationLink$userRepository$firebaseNotificationRepository$messaging);
  563.                         $neueNotification = new UserNotification();
  564.                         $neueNotification->setUser($firmenmitglied);
  565.                         $neueNotification->setVonUserId($this->getUser()->getId());
  566.                         $neueNotification->setUserName($this->getUser()->getuserProfil()->getNachname() . ' ' $this->getUser()->getuserProfil()->getVorname());
  567.                         $neueNotification->setType(8);
  568.                         $neueNotification->setDatum($datum);
  569.                         $neueNotification->setGelesen(0);
  570.                         $neueNotification->setText('');
  571.                         $neueNotification->setLink('' $empfehlung->getId() . '');
  572.                         $entityManager->persist($neueNotification);
  573.                         $entityManager->flush();
  574.                     }
  575.                 }
  576.             }
  577.         }
  578.         $returnData["fehlermeldung"] = false;
  579.         return new JsonResponse($returnData);
  580.     }
  581.     #[Route('/user/produkt/favoriten/speichern/{id}'name'user_produkt_favoriten_speichern'methods: ['GET'])]
  582.     public function favoriten_speichern($id,
  583.                                         UserFavoritenRepository $userFavoritenRepository,
  584.                                         SchulungenRepository $schulungenRepository,
  585.                                         EntityManagerInterface $entityManager): Response
  586.     {
  587.         $userFavoriten null;
  588.         $userID $this->getUser()?->getId();
  589.         $sessionID $this->session->getId();
  590.         if ($userID == null) {
  591.             $userFavoriten $userFavoritenRepository->findBy(['session_id' => $sessionID'schulung' => $id]);
  592.         } else {
  593.             $userFavoriten $userFavoritenRepository->findBy(['user_id' => $userID'schulung' => $id]);
  594.         }
  595.         if ($userFavoriten != null) {
  596.             foreach ($userFavoriten as $userFavorit) {
  597.                 $entityManager->remove($userFavorit);
  598.                 $entityManager->flush();
  599.             }
  600.         }
  601.         $neuerFavorit = new UserFavoriten();
  602.         if ($userID == null) {
  603.             $neuerFavorit->setUserId(0);
  604.             $neuerFavorit->setSessionId($sessionID);
  605.         } else {
  606.             $neuerFavorit->setUserId($userID);
  607.         }
  608.         $schulung $schulungenRepository->findOneBy(['id' => $id]);
  609.         if ($schulung != null) {
  610.             $neuerFavorit->setSchulung($schulung);
  611.             $neuerFavorit->setDatum(new \DateTime('now', new \DateTimeZone('Europe/Berlin')));
  612.             $entityManager->persist($neuerFavorit);
  613.             $entityManager->flush();
  614.         }
  615.         $returnData["anzahlFavoriten"] = 1;
  616.         $returnData["fehlermeldung"] = false;
  617.         return new JsonResponse($returnData);
  618.     }
  619.     #[Route('/user/produkt/favoriten/loeschen/{id}'name'user_produkt_favoriten_loeschen'methods: ['GET'])]
  620.     public function favoriten_loeschen($id,
  621.                                        UserFavoritenRepository $userFavoritenRepository,
  622.                                        EntityManagerInterface $entityManager): Response
  623.     {
  624.         $returnData["anzahlFavoriten"] = -1;
  625.         $userFavoriten null;
  626.         $userID $this->getUser()?->getId();
  627.         $sessionID $this->session->getId();
  628.         if ($userID == null) {
  629.             $userFavoriten $userFavoritenRepository->findBy(['session_id' => $sessionID'schulung' => $id]);
  630.         } else {
  631.             $userFavoriten $userFavoritenRepository->findBy(['user_id' => $userID'schulung' => $id]);
  632.             $alleFavoriten count($userFavoritenRepository->findBy(['user_id' => $userID]));
  633.             $returnData["anzahlFavoriten"] = $alleFavoriten 1;
  634.         }
  635.         if ($userFavoriten != null) {
  636.             foreach ($userFavoriten as $userFavorit) {
  637.                 $entityManager->remove($userFavorit);
  638.                 $entityManager->flush();
  639.             }
  640.         }
  641.         $returnData["fehlermeldung"] = false;
  642.         return new JsonResponse($returnData);
  643.     }
  644.     #[Route('/user/produkt/details/kommentare/speichern/{id}'name'produkt_details_kommentare_speichern'methods: ['POST'])]
  645.     public function produkt_details_kommentare_speichern(Request                      $request$id,
  646.                                                          MailsWarteschleifeController $mailsWarteschleifeController,
  647.                                                          FirmenprofilRepository       $firmenprofilRepository,
  648.                                                          SchulungenRepository         $schulungenRepository,
  649.                                                          EntityManagerInterface       $entityManager): Response
  650.     {
  651.         $schulung $schulungenRepository->findOneBy(['id' => $id]);
  652.         $firma $firmenprofilRepository->findOneBy(['id' => $schulung->getErstellerFirmenId()]);
  653.         $userID $this->getUser()?->getId();
  654.         $sessionID $this->session->getId();
  655.         $kommentare = new SchulungKommentare();
  656.         $kommentare->setSchulung($schulung);
  657.         if ($userID == null) {
  658.             $kommentare->setUserId(0);
  659.             $kommentare->setSessionId($sessionID);
  660.         } else {
  661.             $kommentare->setUserId($userID);
  662.             $kommentare->setSessionId(null);
  663.         }
  664.         $kommentare->setDatum(new \DateTime('now', new \DateTimeZone('Europe/Berlin')));
  665.         $kommentare->setUsername($request->get('name'));
  666.         $kommentare->setKommentar($request->get('text'));
  667.         $entityManager->persist($kommentare);
  668.         $entityManager->flush();
  669.         // Mail an den Schulungsanbieter senden
  670.         $mailsWarteschleifeController->insertMail([
  671.             'preheader' => 'Frage zu einer Schulung - handwerkXcampus',
  672.             'art' => 'Frage',
  673.             'firmenname' => $firma->getFirmenname(),
  674.             'userName' => $request->get('name'),
  675.             'text' => $request->get('text'),
  676.             'schulung' => $schulung->getId(),
  677.         ], $_ENV["MAILER_SENDER_NO_REPLY"],
  678.             $firma->getAnsprechpartnerEmail(),
  679.             'Frage zu einer Schulung - handwerkXcampus',
  680.             'emails/schulung_kommentar.html.twig',
  681.             'Frage Schulung'0,
  682.             $firma->getFirmaBoss());
  683.         $returnData["fehlermeldung"] = false;
  684.         return new JsonResponse($returnData);
  685.     }
  686.     #[Route('/user/produkt/details/kommentare/antwort/speichern/{id}'name'produkt_details_kommentare_antwort_speichern'methods: ['POST'])]
  687.     public function produkt_details_antwort_speichern(Request                      $request$id,
  688.                                                       UserRepository $userRepository,
  689.                                                       SchulungenRepository         $schulungenRepository,
  690.                                                       SchulungKommentareRepository $schulungKommentareRepository,
  691.                                                       MailsWarteschleifeController  $mailsWarteschleifeController,
  692.                                                       EntityManagerInterface       $entityManager): Response
  693.     {
  694.         $schulung $schulungenRepository->findOneBy(['id' => $id]);
  695.         $kommentar $schulungKommentareRepository->findOneBy(['id' => (int)$request->get('kommentarId'), 'schulung' => $schulung]);
  696.         $userID $this->getUser()?->getId();
  697.         if ($userID != null && $kommentar != null) {
  698.             $userFirmenID $this->getUser()->getFirmenProfil()?->getId();
  699.             if ($userFirmenID == $schulung->getErstellerFirmenId() || in_array("ROLE_CELSEO_MASTERADMIN"$this->getUser()->getRoles())) {
  700.                 $antwort = new SchulungKommentarAntworten();
  701.                 $antwort->setKommentar($kommentar);
  702.                 $antwort->setUserId($userID);
  703.                 $antwort->setDatum(new \DateTime('now', new \DateTimeZone('Europe/Berlin')));
  704.                 $antwort->setUsername($this->getUser()->getUserProfil()->getNachname() . ' ' $this->getUser()->getUserProfil()->getVorname());
  705.                 $antwort->setAntwort($request->get('antwort'));
  706.                 $entityManager->persist($antwort);
  707.                 $entityManager->flush();
  708.                 if ($kommentar->getUserId() != null) {
  709.                     $senderUser $userRepository->findOneBy(['id' => $kommentar->getUserId()]);
  710.                     if ($senderUser != null) {
  711.                         $sterneAlt '';
  712.                         $sterne '';
  713.                         // Mail an den Fragenden senden
  714.                         $mailsWarteschleifeController->insertMail([
  715.                             'preheader' => 'Frage wurde beantwortet - handwerkXcampus',
  716.                             'art' => 'Frage beantwortet',
  717.                             'firmenname' => $this->getUser()->getUserProfil()->getVorname() . ' ' $this->getUser()->getUserProfil()->getNachname(),
  718.                             'userName' => $senderUser->getUserProfil()->getVorname() . ' ' $senderUser->getUserProfil()->getNachname(),
  719.                             'sterneAlt' => $sterneAlt,
  720.                             'sterne' => $sterne,
  721.                             'textAlt' => $kommentar->getKommentar(),
  722.                             'text' => $request->get('antwort'),
  723.                             'schulung' => $schulung->getId(),
  724.                         ], $_ENV["MAILER_SENDER_NO_REPLY"],
  725.                             $senderUser->getUserProfil()->getMailversand(),
  726.                             'Frage wurde beantwortet - handwerkXcampus',
  727.                             'emails/schulung_kommentar.html.twig',
  728.                             'Frage Schulung'0,
  729.                             $senderUser);
  730.                     }
  731.                 }
  732.             }
  733.         }
  734.         $returnData["fehlermeldung"] = false;
  735.         return new JsonResponse($returnData);
  736.     }
  737.     #[Route('/user/produkt/details/bewertung/speichern/{id}'name'produkt_details_bewertung_speichern'methods: ['POST'])]
  738.     public function produkt_details_bewertung_speichern(Request                       $request$id,
  739.                                                         MailsWarteschleifeController  $mailsWarteschleifeController,
  740.                                                         FirmenprofilRepository        $firmenprofilRepository,
  741.                                                         SchulungenRepository          $schulungenRepository,
  742.                                                         SchulungBewertungenRepository $schulungBewertungenRepository,
  743.                                                         EntityManagerInterface        $entityManager): Response
  744.     {
  745.         $userID $this->getUser()?->getId();
  746.         $schulung $schulungenRepository->findOneBy(['id' => $id]);
  747.         $firma $firmenprofilRepository->findOneBy(['id' => $schulung->getErstellerFirmenId()]);
  748.         $sterne = (int)$request->get('sterne');
  749.         if ($userID != null && $sterne && $sterne 6) {
  750.             $sterneAlt 0;
  751.             $textAlt '';
  752.             $bewertung $schulungBewertungenRepository->findOneBy(['user_id' => $userID'schulung' => $schulung]);
  753.             if ($bewertung == null) {
  754.                 $art 'Bewertung neu';
  755.                 $bewertung = new SchulungBewertungen();
  756.                 $bewertung->setSchulung($schulung);
  757.                 $bewertung->setUserId($userID);
  758.                 $bewertung->setUsername($request->get('username'));
  759.                 $bewertung->setEmail($this->getUser()->getUserIdentifier());
  760.                 $bewertung->setText($request->get('text'));
  761.             } else {
  762.                 $sterneAlt $bewertung->getSterne();
  763.                 $textAlt $bewertung->getText();
  764.                 $art 'Bewertung bearbeitet';
  765.                 $bewertung->setText('<small>--Bewertung wurde bearbeitet--</small><br>' $request->get('text'));
  766.             }
  767.             $bewertung->setSterne($sterne);
  768.             $bewertung->setDatum(new \DateTime('now', new \DateTimeZone('Europe/Berlin')));
  769.             $entityManager->persist($bewertung);
  770.             $entityManager->flush();
  771.             // Mail an den Schulungsanbieter senden
  772.             $mailsWarteschleifeController->insertMail([
  773.                 'preheader' => 'Schulung wurde bewertet - handwerkXcampus',
  774.                 'art' => $art,
  775.                 'firmenname' => $firma->getFirmenname(),
  776.                 'userName' => $request->get('username'),
  777.                 'sterneAlt' => $sterneAlt,
  778.                 'sterne' => $sterne,
  779.                 'textAlt' => $textAlt,
  780.                 'text' => $request->get('text'),
  781.                 'schulung' => $schulung->getId(),
  782.             ], $_ENV["MAILER_SENDER_NO_REPLY"],
  783.                 $firma->getAnsprechpartnerEmail(),
  784.                 'Schulung wurde bewertet - handwerkXcampus',
  785.                 'emails/schulung_kommentar.html.twig',
  786.                 'Bewertung Schulung'0,
  787.                 $firma->getFirmaBoss());
  788.         }
  789.         $returnData["fehlermeldung"] = false;
  790.         return new JsonResponse($returnData);
  791.     }
  792.     #[Route('/user/produkt/details/kommentare/{id}'name'produkt_details_kommentare')]
  793.     public function produkt_details_kommentare(int                  $id,
  794.                                                UserProfilRepository $userProfilRepository,
  795.                                                SchulungenRepository $schulungenRepository): Response
  796.     {
  797.         $schulung $schulungenRepository->findOneBy(['id' => $id]);
  798.         $userIDs = [];
  799.         $userIDs[] = $schulung->getErstellerUserId();
  800.         if (count($schulung->getSchulungKommentare()) > 0) {
  801.             foreach ($schulung->getSchulungKommentare() as $kommentare) {
  802.                 if ($kommentare->getUserId() != null) {
  803.                     $userIDs[] = $kommentare->getUserId();
  804.                 }
  805.                 if (count($kommentare->getAntworten()) > 0) {
  806.                     foreach ($kommentare->getAntworten() as $antwort) {
  807.                         $userIDs[] = $antwort->getUserId();
  808.                     }
  809.                 }
  810.             }
  811.         }
  812.         return $this->render('user/produkt_details/schulung_kommentare.html.twig', [
  813.             'schulung' => $schulung,
  814.             'userProfile' => $userProfilRepository->findBy(['user' => $userIDs]),
  815.         ]);
  816.     }
  817.     #[Route('/user/produkt/details/bewertungen/{id}'name'produkt_details_bewertungen')]
  818.     public function produkt_details_bewertungen(int                  $id,
  819.                                                 UserProfilRepository $userProfilRepository,
  820.                                                 SchulungenRepository $schulungenRepository): Response
  821.     {
  822.         $schulung $schulungenRepository->findOneBy(['id' => $id]);
  823.         $userIDs = [];
  824.         $sterne = [00000];
  825.         $anzahlBewertungen count($schulung->getBewertungen());
  826.         $durchschnittBewertungen 0;
  827.         if ($anzahlBewertungen 0) {
  828.             foreach ($schulung->getBewertungen() as $bewertung) {
  829.                 $userIDs[] = $bewertung->getUserId();
  830.                 $sterne[$bewertung->getSterne() - 1] = $sterne[$bewertung->getSterne() - 1] + 1;
  831.             }
  832.             $durchschnittBewertungen = (($sterne[0] * 1) + ($sterne[1] * 2) + ($sterne[2] * 3) + ($sterne[3] * 4) + ($sterne[4] * 5)) / $anzahlBewertungen;
  833.         }
  834.         return $this->render('user/produkt_details/schulung_bewertungen.html.twig', [
  835.             'schulung' => $schulung,
  836.             'userProfile' => $userProfilRepository->findBy(['user' => $userIDs]),
  837.             'sterne' => $sterne,
  838.             'durchschnitt' => $durchschnittBewertungen,
  839.         ]);
  840.     }
  841.     #[Route('/user/dozent/{id}'name'user_dozent')]
  842.     public function user_dozent($idDozentRepository $dozentRepository,
  843.                                 FirmenprofilRepository $firmenprofilRepository,
  844.                                 UserFavoritenRepository $userFavoritenRepository,
  845.                                 SchulungsTermineRepository $schulungsTermineRepository): Response
  846.     {
  847.         $userId $this->getUser()?->getId();
  848.         $sessionId $this->session->getId();
  849.         if ($userId == null) {
  850.             $favoriten $userFavoritenRepository->findBy(['session_id' => $sessionId]);
  851.         } else {
  852.             $favoriten $userFavoritenRepository->findBy(['user_id' => $userId]);
  853.         }
  854.         $dozent $dozentRepository->findOneBy(['user' => $id]);
  855.         $termine $schulungsTermineRepository->findBy(['dozent_user' => $id]);
  856.         return $this->render('user/produkt_details/dozent.html.twig', [
  857.             'dozent' => $dozent,
  858.             'termine' => $termine,
  859.             'favoriten' => $favoriten,
  860.             'firmenprofile' => $firmenprofilRepository->findAll(),
  861.         ]);
  862.     }
  863. }