src/Controller/userController/UserProfilController.php line 60

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\AllgemeineFunktionenController;
  6. use App\Controller\basisController\UserBasisController;
  7. use App\Controller\emailVersandController\MailsWarteschleifeController;
  8. use App\Controller\masteradminController\SecurityController;
  9. use App\Controller\oAuthLoginController\LoginController;
  10. use App\Entity\CelseoIntranetVerbindung;
  11. use App\Entity\Dozent;
  12. use App\Entity\FirmenMitgliederanfrage;
  13. use App\Entity\UserNotification;
  14. use App\Repository\AdminSecurityRoleRepository;
  15. use App\Repository\BuchungenRechnungenRepository;
  16. use App\Repository\BuchungenRepository;
  17. use App\Repository\BuchungenSeminareTeilnehmerRepository;
  18. use App\Repository\CelseoIntranetVerbindungRepository;
  19. use App\Repository\DozentRepository;
  20. use App\Repository\FirebaseNotificationRepository;
  21. use App\Repository\FirmenDateimanagerRepository;
  22. use App\Repository\FirmenInterneSchulungenRepository;
  23. use App\Repository\FirmenInterneSchulungenZertifikatRepository;
  24. use App\Repository\FirmenMitgliederanfrageRepository;
  25. use App\Repository\FirmenprofilRepository;
  26. use App\Repository\GutscheincodesRepository;
  27. use App\Repository\SchulungBeobachtenRepository;
  28. use App\Repository\SchulungsArtRepository;
  29. use App\Repository\SchulungsTermineRepository;
  30. use App\Repository\UserFavoritenRepository;
  31. use App\Repository\UserNotificationRepository;
  32. use App\Repository\UserProfilRepository;
  33. use App\Repository\UserRepository;
  34. use App\Repository\UserRolesGekauftRepository;
  35. use Doctrine\ORM\EntityManagerInterface;
  36. use Kreait\Firebase\Contract\Messaging;
  37. use Symfony\Component\Filesystem\Filesystem;
  38. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  39. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  40. use Symfony\Component\HttpFoundation\JsonResponse;
  41. use Symfony\Component\HttpFoundation\Request;
  42. use Symfony\Component\HttpFoundation\Response;
  43. use Symfony\Component\Mailer\MailerInterface;
  44. use Symfony\Component\Routing\Annotation\Route;
  45. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  46. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  47. use Symfony\Component\String\Slugger\SluggerInterface;
  48. use Symfony\Component\Finder\Finder;
  49. use Symfony\Component\Uid\Uuid;
  50. use Symfony\Contracts\HttpClient\HttpClientInterface;
  51. #[Route('/user/profil')]
  52. class UserProfilController extends UserBasisController
  53. {
  54.     #[Route('/mein_profil/info/{seite}'name'user_profil_mein_profil_info')]
  55.     public function index($seiteBuchungenSeminareTeilnehmerRepository $buchungenSeminareTeilnehmerRepository,
  56.                           FirmenInterneSchulungenZertifikatRepository $zertifikatRepository,
  57.                           GutscheincodesRepository $gutscheincodesRepository,
  58.                           UserFavoritenRepository $userFavoritenRepository): Response
  59.     {
  60.         $arrayScript $this->getUserBC_script_bildupload();
  61.         $uploadTemplateScript $arrayScript[0];
  62.         $downloadTemplateScript $arrayScript[1];
  63.         return $this->render('user/profil/profil_info.html.twig', [
  64.             'seite' => $seite,
  65.             'gutscheine' => $gutscheincodesRepository->findBy(['an_user_id' => $this->getUser()->getId(), 'firma' => null]),
  66.             'zertifikate' => $zertifikatRepository->findBy(['user' => $this->getUser()], ['datum' => 'DESC']),
  67.             'favoritenanzahl' => count($userFavoritenRepository->findBy(['user_id' => $this->getUser()->getId()])),
  68.             'termine' => $buchungenSeminareTeilnehmerRepository->findBy(['user' => $this->getUser()->getId(), 'status' => 0]),
  69.             'uploadTemplateScript' => $uploadTemplateScript,
  70.             'downloadTemplateScript' => $downloadTemplateScript,
  71.         ]);
  72.     }
  73.     #[Route('/mein_profil/account_loeschen'name'user_profil_mein_profil_account_loeschen')]
  74.     public function user_profil_mein_profil_account_loeschen(): Response
  75.     {
  76.         return $this->render('user/profil/profil_loeschen_abfrage.html.twig', [
  77.         ]);
  78.     }
  79.     #[Route('/mein_profil/account_loeschen_durchfuehren'name'user_profil_mein_profil_account_loeschen_durchfuehren')]
  80.     public function user_profil_mein_profil_account_loeschen_durchfuehren(Request                $request,
  81.                                                                           UserRepository         $userRepository,
  82.                                                                           EntityManagerInterface $entityManager): Response
  83.     {
  84.         $returnData["error"] = true;
  85.         $user $userRepository->findOneBy(['id' => $this->getUser()]);
  86.         if ($user != null) {
  87.             if (password_verify($request->get('kennwort'), $user->getPassword())) {
  88.                 //Todo: alle Dateien löschen wenn irgendwann Aktiv
  89.                 foreach ($user->getNotdienste() as $notdienst) {
  90.                     $notdienst->setUser(null);
  91.                     $notdienst->setVorname($user->getUserProfil()->getVorname());
  92.                     $notdienst->setNachname($user->getUserProfil()->getNachname());
  93.                     if ($notdienst->getErsatzUser() == null) {
  94.                         $notdienst->setPushNotificationDatum(null);
  95.                     }
  96.                     $entityManager->persist($notdienst);
  97.                 }
  98.                 foreach ($user->getNotdiensteErsatz() as $notdienst) {
  99.                     $notdienst->setErsatzUser(null);
  100.                     $notdienst->setErsatzVorname($user->getUserProfil()->getVorname());
  101.                     $notdienst->setErsatzNachname($user->getUserProfil()->getNachname());
  102.                     $notdienst->setPushNotificationDatum(null);
  103.                     $entityManager->persist($notdienst);
  104.                 }
  105.                 $entityManager->flush();
  106.                 $user->setFirmenProfil(null);
  107.                 $user->setEmail('geloeschter_account_' $user->getId() . '_' $user->getEmail());
  108.                 $user->setFreigeschaltet(0);
  109.                 $entityManager->persist($user);
  110.                 $entityManager->flush();
  111.                 $returnData["error"] = false;
  112.             }
  113.         }
  114.         return new JsonResponse($returnData);
  115.     }
  116.     #[Route('/mein_profil/updates/laden'name'user_profil_mein_profil_updates_laden')]
  117.     public function profilUpdatesLaden(UserRepository $userRepositoryEntityManagerInterface $entityManager): Response
  118.     {
  119.         $user $userRepository->findOneBy(['id' => $this->getUser()->getId()]);
  120.         if ($user->getCampusUpdate() != $_ENV["CAMPUS_UPDATE_VERSION"]) {
  121.             $user->setCampusUpdate($_ENV["CAMPUS_UPDATE_VERSION"]);
  122.             $entityManager->persist($user);
  123.             $entityManager->flush();
  124.         }
  125.         return $this->render('user/profil/profil_info_updates.html.twig', [
  126.         ]);
  127.     }
  128.     #[Route('/mein_profil/kalender/laden'name'user_profil_mein_profil_kalender_laden')]
  129.     public function profilKalenderLaden(): Response
  130.     {
  131.         return $this->render('user/profil/profil_info_kalender.html.twig', [
  132.         ]);
  133.     }
  134.     #[Route('/mein_profil/bearbeiten/laden'name'user_profil_mein_profil_bearbeiten_laden')]
  135.     public function profilBearbeitenLaden(): Response
  136.     {
  137.         return $this->render('user/profil/profil_info_bearbeiten.html.twig', [
  138.         ]);
  139.     }
  140.     #[Route('/mein_profil/dashboard/laden'name'user_profil_mein_profil_dashboard_laden')]
  141.     public function profilDashboardLaden(FirmenInterneSchulungenZertifikatRepository $zertifikatRepository,
  142.                                          BuchungenRepository                         $buchungenRepository,
  143.                                          GutscheincodesRepository                    $gutscheincodesRepository): Response
  144.     {
  145.         return $this->render('user/profil/profil_info_dashboard.html.twig', [
  146.             'gutscheine' => $gutscheincodesRepository->findBy(['an_user_id' => $this->getUser()->getId(), 'firma' => null]),
  147.             'zertifikate' => $zertifikatRepository->findBy(['user' => $this->getUser()], ['datum' => 'DESC']),
  148.             'offeneBuchungen' => $buchungenRepository->findBy(['user' => $this->getUser(), 'bezahlstatus' => 0]),
  149.         ]);
  150.     }
  151.     #[Route('/mein_profil/gutscheine/laden'name'user_profil_mein_profil_gutscheine_laden')]
  152.     public function user_profil_mein_profil_gutscheine_laden(GutscheincodesRepository $gutscheincodesRepository): Response
  153.     {
  154.         return $this->render('user/profil/profil_info_gutscheine.html.twig', [
  155.             'gutscheine' => $gutscheincodesRepository->findBy(['an_user_id' => $this->getUser()->getId(), 'firma' => null]),
  156.         ]);
  157.     }
  158.     #[Route('/mein_profil/favoriten/laden'name'user_profil_mein_profil_favoriten_laden')]
  159.     public function profilFavoritenLaden(FirmenprofilRepository  $firmenprofilRepository,
  160.                                          UserFavoritenRepository $userFavoritenRepository): Response
  161.     {
  162.         return $this->render('user/profil/profil_info_favoriten.html.twig', [
  163.             'favoriten' => $userFavoritenRepository->findBy(['user_id' => $this->getUser()->getId()]),
  164.             'firmenprofile' => $firmenprofilRepository->findAll(),
  165.         ]);
  166.     }
  167.     #[Route('/mein_profil/beobachtungen/laden'name'user_profil_mein_profil_beobachtungen_laden')]
  168.     public function profilBeobachtungenLaden(FirmenprofilRepository       $firmenprofilRepository,
  169.                                              SchulungBeobachtenRepository $schulungBeobachtenRepository): Response
  170.     {
  171.         return $this->render('user/profil/profil_info_beobachtungen.html.twig', [
  172.             'beobachtungen' => $schulungBeobachtenRepository->findBy(['user' => $this->getUser()]),
  173.             'firmenprofile' => $firmenprofilRepository->findAll(),
  174.         ]);
  175.     }
  176.     #[Route('/mein_profil/zertifikate/laden'name'user_profil_mein_profil_zertifikate_laden')]
  177.     public function profilZertifikateLaden(FirmenInterneSchulungenZertifikatRepository $zertifikatRepository,
  178.                                            FirmenInterneSchulungenRepository           $firmenInterneSchulungenRepository): Response
  179.     {
  180.         $zertifikate $zertifikatRepository->findBy(['user' => $this->getUser()], ['datum' => 'DESC']);
  181.         $musterIDs = [];
  182.         $schulungsIDs = [];
  183.         foreach ($zertifikate as $zertifikat) {
  184.             $schulungsIDs[] = $zertifikat->getFirmenSchulungId();
  185.         }
  186.         $schulungsIDs array_unique($schulungsIDs);
  187.         $schulungen $firmenInterneSchulungenRepository->findBy(['id' => $schulungsIDs'status' => 1]);
  188.         foreach ($zertifikate as $zertifikat) {
  189.             foreach ($schulungen as $schulung) {
  190.                 if ($schulung->getId() == $zertifikat->getFirmenSchulungId()) {
  191.                     $tmpMuster['id'] = $zertifikat->getId();
  192.                     $tmpMuster['datum'] = $schulung->getStatusDatum()->format('d.m.Y');
  193.                     $musterIDs[] = $tmpMuster;
  194.                 }
  195.             }
  196.         }
  197.         return $this->render('user/profil/profil_info_zertifikate.html.twig', [
  198.             'zertifikate' => $zertifikate,
  199.             'musterIDs' => $musterIDs,
  200.         ]);
  201.     }
  202.     #[Route('/mein_profil/buchungen/laden'name'user_profil_mein_profil_buchungen_laden')]
  203.     public function profilBuchungenLaden(BuchungenRepository                   $buchungenRepository,
  204.                                          BuchungenSeminareTeilnehmerRepository $buchungenSeminareTeilnehmerRepository,
  205.                                          SchulungsArtRepository                $schulungsArtRepository,
  206.                                          UserNotificationRepository            $notificationRepository,
  207.                                          EntityManagerInterface                $entityManager): Response
  208.     {
  209.         $notifications $notificationRepository->findBy(['type' => 9'user' => $this->getUser()->getId()]);
  210.         foreach ($notifications as $notification) {
  211.             $entityManager->remove($notification);
  212.             $entityManager->flush();
  213.         }
  214.         $buchungenIDs = [];
  215.         $selbstGebuchte $buchungenRepository->findBy(['user' => $this->getUser()->getId()]);
  216.         foreach ($selbstGebuchte as $selbstGebucht) {
  217.             $buchungenIDs[] = $selbstGebucht->getId();
  218.         }
  219.         $seminareTeilnehmer $buchungenSeminareTeilnehmerRepository->findBy(['user' => $this->getUser()->getId()]);
  220.         foreach ($seminareTeilnehmer as $teilnehmer) {
  221.             if ($teilnehmer->getBuchungenSeminar()->getBuchung()->getBezahlstatus() > 10) {
  222.                 $buchungenIDs[] = $teilnehmer->getBuchungenSeminar()->getBuchung()->getId();
  223.             }
  224.         }
  225.         $buchungenIDs array_unique($buchungenIDs);
  226.         $buchungen $buchungenRepository->findBy(['id' => $buchungenIDs], ['datum_bestellung' => 'DESC']);
  227.         return $this->render('user/profil/profil_info_buchungen.html.twig', [
  228.             'buchungen' => $buchungen,
  229.             'schulungsarten' => $schulungsArtRepository->findAll(),
  230.         ]);
  231.     }
  232.     #[Route('/mein_profil/warenkorb/laden'name'user_profil_mein_profil_warenkorb_laden')]
  233.     public function profilWarenkorbLaden(BuchungenRepository    $buchungenRepository,
  234.                                          SchulungsArtRepository $schulungsArtRepository): Response
  235.     {
  236.         return $this->render('user/profil/profil_info_warenkorb.html.twig', [
  237.             'buchungen' => $buchungenRepository->findBy(['bezahlstatus' => 0'user' => $this->getUser()->getId()], ['datum_bestellung' => 'DESC']),
  238.             'schulungsarten' => $schulungsArtRepository->findAll(),
  239.         ]);
  240.     }
  241.     #[Route('/mein_profil/buchungen/rechnungen/download/{id}'name'user_profil_mein_profil_buchungen_rechnungen_download')]
  242.     public function user_profil_mein_profil_buchungen_rechnungen_download($id,
  243.                                                                           BuchungenRechnungenRepository $buchungenRechnungenRepository,
  244.                                                                           HttpClientInterface $httpClient): Response
  245.     {
  246.         $buchungenRechnungen $buchungenRechnungenRepository->findOneBy(['id' => $id]);
  247.         if ($buchungenRechnungen->getBuchung()->getUser()->getId() == $this->getUser()->getId() && $buchungenRechnungen->getBuchung()->getBezahlstatus() == 41) {
  248.             $rechnung $httpClient->request('GET'$_ENV['WECLAPP_API_URL'] . 'salesInvoice/id/' $buchungenRechnungen->getWeclappRechnungsId(), [
  249.                 'headers' => [
  250.                     'Content-Type' => 'application/json',
  251.                     'AuthenticationToken' => $_ENV['WECLAPP_API_KEY']
  252.                 ],
  253.             ])->toArray(false);
  254.             $rechnungResponse $httpClient->request("GET"$_ENV['WECLAPP_API_URL'] . 'salesInvoice/id/' $buchungenRechnungen->getWeclappRechnungsId() . '/downloadLatestSalesInvoicePdf', [
  255.                 'headers' => [
  256.                     'Content-Type' => 'application/json',
  257.                     'AuthenticationToken' => $_ENV['WECLAPP_API_KEY']
  258.                 ],
  259.             ]);
  260.             if ($rechnungResponse->getStatusCode() == 200) {
  261.                 $outputStream fopen('php://memory''rw+');
  262.                 foreach ($httpClient->stream($rechnungResponse) as $chunk) {
  263.                     fwrite($outputStream$chunk->getContent());
  264.                 }
  265.             } else {
  266.                 // TODO: FEHLER
  267.                 dd("Es ist ein FEHLER aufgetreten");
  268.             }
  269.             $response = new Response();
  270.             $response->headers->set('Content-Type''application/pdf');
  271.             $response->headers->set('Content-Disposition''attachment; filename="campus-' $rechnung['invoiceNumber'] . '.pdf"');
  272.             $response->setContent(stream_get_contents($outputStream, -10));
  273.             return $response;
  274.         } else {
  275.             return $this->redirectToRoute('user_start');
  276.         }
  277.     }
  278.     #[Route('/mein_profil/termine/laden'name'user_profil_mein_profil_termine_laden')]
  279.     public function profilTermineLaden(BuchungenSeminareTeilnehmerRepository $buchungenSeminareTeilnehmerRepository,
  280.                                        SchulungsArtRepository                $schulungsArtRepository,
  281.                                        SchulungsTermineRepository            $schulungsTermineRepository): Response
  282.     {
  283.         $gebuchteTermine $buchungenSeminareTeilnehmerRepository->findBy(['user' => $this->getUser()->getId(), 'status' => 0]);
  284.         $terminIDs = [];
  285.         foreach ($gebuchteTermine as $gebuchterTermin) {
  286.             $schulungsart $gebuchterTermin->getBuchungenSeminar()->getTermin()->getSchulung()->getSchulungsart()->getId();
  287.             if ($schulungsart == or $schulungsart == 4) {
  288.                 foreach ($gebuchterTermin->getBuchungenSeminar()->getTermin()->getSchulung()->getSchulungstermine() as $gefundenTermin) {
  289.                     $terminIDs[] = $gefundenTermin->getId();
  290.                 }
  291.             } else {
  292.                 $terminIDs[] = $gebuchterTermin->getBuchungenSeminar()->getTermin()->getId();
  293.             }
  294.         }
  295.         $termine $schulungsTermineRepository->findBy(['id' => $terminIDs], ['von' => 'ASC']);
  296.         return $this->render('user/profil/profil_info_termine.html.twig', [
  297.             'gebuchteTermine' => $gebuchteTermine,
  298.             'termine' => $termine,
  299.             'schulungsarten' => $schulungsArtRepository->findAll(),
  300.         ]);
  301.     }
  302.     #[Route('/mein_profil/benachrichtigungen/laden'name'user_profil_mein_profil_benachrichtigungen_laden')]
  303.     public function profilBenachrichtigungenLaden(FirebaseNotificationRepository $firebaseNotificationRepository): Response
  304.     {
  305.         $geraete $firebaseNotificationRepository->findBy(['user' => $this->getUser()]);
  306.         return $this->render('user/profil/profil_info_benachrichtigungen.html.twig', [
  307.             'geraete' => $geraete,
  308.             'lable' => $this->getLableInternerBereich(),
  309.         ]);
  310.     }
  311.     #[Route('/mein_profil/benachrichtigungen/geraetename/laden/{id}'name'user_profil_mein_profil_benachrichtigungen_geraetename_laden')]
  312.     public function benachrichtigungen_geraetename_laden($id,
  313.                                                          FirebaseNotificationRepository $firebaseNotificationRepository): Response
  314.     {
  315.         $geraet $firebaseNotificationRepository->findOneBy(['user' => $this->getUser(), 'id' => $id]);
  316.         return $this->render('user/profil/profil_info_benachrichtigungen_geraetename.html.twig', [
  317.             'geraet' => $geraet,
  318.         ]);
  319.     }
  320.     #[Route('/mein_profil/benachrichtigungen/geraetename/speichern/{id}'name'user_profil_mein_profil_benachrichtigungen_geraetename_speichern')]
  321.     public function benachrichtigungen_geraetename_speichern(Request                        $request$idEntityManagerInterface $entityManager,
  322.                                                              FirebaseNotificationRepository $firebaseNotificationRepository): Response
  323.     {
  324.         $geraet $firebaseNotificationRepository->findOneBy(['user' => $this->getUser(), 'id' => $id]);
  325.         $returnData["error"] = true;
  326.         $returnData["geraeteID"] = $id;
  327.         $returnData["geraetename"] = '';
  328.         if ($geraet != null) {
  329.             $name $request->get('name');
  330.             if (strlen($name) > 0) {
  331.                 $geraet->setName($name);
  332.                 $returnData["geraetename"] = $name;
  333.             } else {
  334.                 $geraet->setName(null);
  335.                 $deviceInformation json_decode($geraet->getDeviceInformation(), true);
  336.                 $returnData["geraetename"] = $deviceInformation['model'];
  337.             }
  338.             $entityManager->persist($geraet);
  339.             $entityManager->flush();
  340.             $returnData["error"] = false;
  341.         }
  342.         return new JsonResponse($returnData);
  343.     }
  344.     #[Route('/mein_profil/benachrichtigungen/test_notification/{id}'name'user_profil_mein_profil_test_notification')]
  345.     public function test_notification($id,
  346.                                       FirebaseNotificationRepository $firebaseNotificationRepository,
  347.                                       UserRepository $userRepository,
  348.                                       Messaging $messaging,
  349.                                       FirebaseController $firebaseController): Response
  350.     {
  351.         $geraet $firebaseNotificationRepository->findBy(['id' => $id'user' => $this->getUser()]);
  352.         if ($geraet != null) {
  353.             $userIDs = [];
  354.             $userIDs[] = $this->getUser()->getId();
  355.             $notificationEmpfaenger $userIDs;
  356.             $notificationTitle 'handwerkXcampus Test-Notification';
  357.             $notificationVorschau 'Hallo ' $this->getUser()->getUserProfil()->getVorname() . ', Test bestanden.';
  358.             $notificationBody 'Dies ist eine Testnotification. Der Test war erfolgreich';
  359.             $notificationLink $_ENV["WEBSITE_URL"] . '/user/profil/mein_profil/info/benachrichtigungen';
  360.             $firebaseController->firebaseNotificationSenden('Test'$notificationEmpfaenger$notificationTitle$notificationVorschau$notificationBody$notificationLink$userRepository$firebaseNotificationRepository$messaging$id);
  361.         }
  362.         $returnData["error"] = false;
  363.         return new JsonResponse($returnData);
  364.     }
  365.     #[Route('/mein_profil/benachrichtigungen/pushnachrichten_speichern'name'user_profil_mein_profil_app_pushnachrichten_speichern')]
  366.     public function user_profil_mein_profil_app_pushnachrichten_speichern(Request                        $request,
  367.                                                                           FirebaseNotificationRepository $firebaseNotificationRepository,
  368.                                                                           EntityManagerInterface         $entityManager): Response
  369.     {
  370.         $daten null;
  371.         $geraeteId $request->get('geraetId');
  372.         $art $request->get('art');
  373.         $value $request->get('value');
  374.         $geraet $firebaseNotificationRepository->findOneBy(['user' => $this->getUser(), 'id' => $geraeteId]);
  375.         if ($geraet != null) {
  376.             if ($geraet->getEinstellungen() != null) {
  377.                 $daten json_decode($geraet->getEinstellungen(), true);
  378.             }
  379.             $daten[$art] = $value;
  380.             $geraet->setEinstellungen(json_encode($daten));
  381.             $entityManager->persist($geraet);
  382.             $entityManager->flush();
  383.         }
  384.         $returnData["error"] = false;
  385.         return new JsonResponse($returnData);
  386.     }
  387.     #[Route('/mein_profil/benachrichtigungen/emailnachrichten_speichern'name'user_profil_mein_profil_emailnachrichten_speichern')]
  388.     public function user_profil_mein_profil_emailnachrichten_speichern(Request                $requestUserRepository $userRepository,
  389.                                                                        EntityManagerInterface $entityManager): Response
  390.     {
  391.         $daten null;
  392.         $art $request->get('art');
  393.         $value $request->get('value');
  394.         $user $userRepository->findOneBy(['id' => $this->getUser()]);
  395.         if ($user->getEinstellungen() != null) {
  396.             $daten json_decode($user->getEinstellungen(), true);
  397.         }
  398.         $daten[$art] = $value;
  399.         $user->setEinstellungen(json_encode($daten));
  400.         $entityManager->persist($user);
  401.         $entityManager->flush();
  402.         $returnData["error"] = false;
  403.         return new JsonResponse($returnData);
  404.     }
  405.     #[Route('/mein_profil/benachrichtigungen/geraet_entfernen/{id}'name'user_profil_mein_profil_geraet_entfernen')]
  406.     public function user_profil_mein_profil_geraet_entfernen($idFirebaseNotificationRepository $firebaseNotificationRepositoryEntityManagerInterface $entityManager): Response
  407.     {
  408.         $geraet $firebaseNotificationRepository->findOneBy(['id' => $id'user' => $this->getUser()->getId()]);
  409.         $returnData["error"] = false;
  410.         if ($geraet != null) {
  411.             $entityManager->remove($geraet);
  412.             $entityManager->flush();
  413.         } else {
  414.             $returnData["error"] = true;
  415.         }
  416.         return new JsonResponse($returnData);
  417.     }
  418.     #[Route('/mein_profil/intranet/laden'name'user_profil_mein_profil_intranet_laden')]
  419.     public function profilIntranetLaden(CelseoIntranetVerbindungRepository $celseoIntranetVerbindungRepository,
  420.                                         AllgemeineFunktionenController     $allgemeineFunktionenController): Response
  421.     {
  422.         $verbindungscode null;
  423.         $verbindungscodeEnde null;
  424.         $tmpVerbindungscode $celseoIntranetVerbindungRepository->findVerbindungsCode($this->getUser()->getId());
  425.         if (count($tmpVerbindungscode) > 0) {
  426.             $verbindungscode $tmpVerbindungscode[0]->getGuid();
  427.             $datumClone = clone $tmpVerbindungscode[0]->getDatum();
  428.             $verbindungscodeEnde $datumClone->modify('+30 minutes');
  429.         }
  430.         $jsonData['campusId'] = $this->getUser()->getId();
  431.         $ergebnis false;
  432.         $accounts = [];
  433.         $intranetResponse $allgemeineFunktionenController->jsonDatenSendenAnIntranet('intranet_user_verbindungen/auslesen'$jsonData);
  434.         if ($intranetResponse['ergebnis']) {
  435.             $ergebnis true;
  436.             $accounts $intranetResponse['accounts'];
  437.         }
  438.         return $this->render('user/profil/profil_info_intranet.html.twig', [
  439.             'ergebnis' => $ergebnis,
  440.             'accounts' => $accounts,
  441.             'verbindungscode' => $verbindungscode,
  442.             'verbindungscodeEnde' => $verbindungscodeEnde,
  443.         ]);
  444.     }
  445.     #[Route('/mein_profil/intranet/verbindungscode'name'user_profil_mein_profil_intranet_verbindungscode')]
  446.     public function user_profil_mein_profil_intranet_verbindungscode(CelseoIntranetVerbindungRepository $celseoIntranetVerbindungRepository,
  447.                                                                      EntityManagerInterface             $entityManager): Response
  448.     {
  449.         $returnData["error"] = false;
  450.         $datum = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
  451.         $verbindungscodes $celseoIntranetVerbindungRepository->findBy(['user_id' => $this->getUser()->getId(), 'intranet_user_id' => 0]);
  452.         foreach ($verbindungscodes as $verbindungscode) {
  453.             $entityManager->remove($verbindungscode);
  454.             $entityManager->flush();
  455.         }
  456.         $tmpGuid Uuid::v4();
  457.         $tmpGuidExplode explode('-'$tmpGuid);
  458.         $guid $tmpGuidExplode[1] . '-' $tmpGuidExplode[2] . '-' $tmpGuidExplode[3] . '-' $this->getUser()->getId();
  459.         $verbindungscode = new CelseoIntranetVerbindung();
  460.         $verbindungscode->setUserId($this->getUser()->getId());
  461.         $verbindungscode->setGuid($guid);
  462.         $verbindungscode->setDatum($datum);
  463.         $verbindungscode->setIntranetUserId(0);
  464.         $entityManager->persist($verbindungscode);
  465.         $entityManager->flush();
  466.         return new JsonResponse($returnData);
  467.     }
  468.     #[Route('/mein_profil/intranet/login/{intranetAnsprechpartnerId}'name'user_profil_mein_profil_intranet_login')]
  469.     public function user_profil_mein_profil_intranet_login($intranetAnsprechpartnerId,
  470.                                                            CelseoIntranetVerbindungRepository $celseoIntranetVerbindungRepository,
  471.                                                            AllgemeineFunktionenController $allgemeineFunktionenController,
  472.                                                            EntityManagerInterface $entityManager): Response
  473.     {
  474.         $returnData["error"] = true;
  475.         $returnData["link"] = $_ENV["CELSEO_INTRANET_URL"];
  476.         $datum = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
  477.         $verbindungscodes $celseoIntranetVerbindungRepository->findBy(['user_id' => $this->getUser()->getId()]);
  478.         foreach ($verbindungscodes as $verbindungscode) {
  479.             if ($verbindungscode->getIntranetUserId() != 0) {
  480.                 $entityManager->remove($verbindungscode);
  481.                 $entityManager->flush();
  482.             }
  483.         }
  484.         $jsonData['campusId'] = $this->getUser()->getId();
  485.         $intranetResponse $allgemeineFunktionenController->jsonDatenSendenAnIntranet('intranet_user_verbindungen/auslesen'$jsonData);
  486.         if ($intranetResponse['ergebnis']) {
  487.             foreach ($intranetResponse['accounts'] as $account) {
  488.                 if ($account['intranetAnsprechpartnerId'] == $intranetAnsprechpartnerId && $account['campusZumIntranetLogin'] == 1) {
  489.                     $returnData["error"] = false;
  490.                     $tmpGuid Uuid::v4();
  491.                     $guid str_replace('-'''$tmpGuid);
  492.                     $verbindungscode = new CelseoIntranetVerbindung();
  493.                     $verbindungscode->setUserId($this->getUser()->getId());
  494.                     $verbindungscode->setGuid($guid);
  495.                     $verbindungscode->setDatum($datum);
  496.                     $verbindungscode->setIntranetUserId($intranetAnsprechpartnerId);
  497.                     $entityManager->persist($verbindungscode);
  498.                     $entityManager->flush();
  499.                     $returnData["link"] = $_ENV["CELSEO_INTRANET_DEMO_URL"] . 'campus-login?AP=' $intranetAnsprechpartnerId '&guid=' $guid;
  500.                     break;
  501.                 }
  502.             }
  503.         }
  504.         return new JsonResponse($returnData);
  505.     }
  506.     #[Route('/mein_profil/intranet/campus_verbindung_entfernen/{intranetAnsprechpartnerId}'name'user_profil_mein_profil_intranet_campus_verbindung_entfernen')]
  507.     public function user_profil_mein_profil_intranet_campus_verbindung_entfernen($intranetAnsprechpartnerId,
  508.                                                            AllgemeineFunktionenController $allgemeineFunktionenController): Response
  509.     {
  510.         $jsonData['campusId'] = $this->getUser()->getId();
  511.         $jsonData['apId'] = $intranetAnsprechpartnerId;
  512.         $intranetResponse $allgemeineFunktionenController->jsonDatenSendenAnIntranet('intranet_user_verbindung/loeschen'$jsonData);
  513.         $returnData["ergebnis"] = $intranetResponse['ergebnis'];
  514.         return new JsonResponse($returnData);
  515.     }
  516.     #[Route('/mein_profil/mailadressen/laden'name'user_profil_mein_profil_mailadressen_laden')]
  517.     public function profilMailadressenLaden(): Response
  518.     {
  519.         return $this->render('user/profil/profil_info_mailadressen.html.twig', [
  520.         ]);
  521.     }
  522.     #[Route('/mein_profil/mailadressen/mail/speichern'name'user_profil_mein_profil_mailadressen_mail_speichern')]
  523.     public function profilMailadressenMailSpeichern(Request                $request,
  524.                                                     UserRepository         $userRepository,
  525.                                                     MailerInterface        $mailer,
  526.                                                     UrlGeneratorInterface  $urlGenerator,
  527.                                                     SecurityController     $securityController,
  528.                                                     EntityManagerInterface $entityManager): Response
  529.     {
  530.         $userKontrolle $userRepository->findBy(['email' => $request->get('neue_mailadresse')]);
  531.         $returnData["error"] = false;
  532.         if ($userKontrolle == null) {
  533.             $user $userRepository->findOneBy(['id' => $this->getUser()->getId()]);
  534.             $user->setAenderungsindex(1);
  535.             $user->setAenderung($request->get('neue_mailadresse'));
  536.             $user->setGuid(Uuid::v4());
  537.             $entityManager->persist($user);
  538.             $entityManager->flush();
  539.             $securityController->sendNeueMailadresseEmail($user$urlGenerator$mailer);
  540.         } else {
  541.             $returnData["error"] = true;
  542.         }
  543.         return new JsonResponse($returnData);
  544.     }
  545.     #[Route('/mein_profil/mailadressen/mail/speichern/abbrechen'name'user_profil_mein_profil_mailadressen_mail_speichern_abbrechen')]
  546.     public function profilMailadressenMailSpeichernAbbrechen(UserRepository         $userRepository,
  547.                                                              EntityManagerInterface $entityManager): Response
  548.     {
  549.         $user $userRepository->findOneBy(['id' => $this->getUser()->getId()]);
  550.         $user->setAenderungsindex(null);
  551.         $user->setAenderung(null);
  552.         $user->setGuid(null);
  553.         $entityManager->persist($user);
  554.         $entityManager->flush();
  555.         $returnData["error"] = false;
  556.         return new JsonResponse($returnData);
  557.     }
  558.     #[Route('/mein_profil/mailadressen/versandmail/speichern'name'user_profil_mein_profil_mailadressen_versandmail_speichern')]
  559.     public function profilMailadressenVersandmailSpeichern(Request                $request,
  560.                                                            UserRepository         $userRepository,
  561.                                                            MailerInterface        $mailer,
  562.                                                            UrlGeneratorInterface  $urlGenerator,
  563.                                                            SecurityController     $securityController,
  564.                                                            EntityManagerInterface $entityManager): Response
  565.     {
  566.         $neueMail $request->get('neue_versandmailadresse');
  567.         $user $userRepository->findOneBy(['id' => $this->getUser()->getId()]);
  568.         $returnData["error"] = false;
  569.         if ($user->getEmail() != $neueMail) {
  570.             $user->setAenderungsindex(2);
  571.             $user->setAenderung($neueMail);
  572.             $user->setGuid(Uuid::v4());
  573.             $entityManager->persist($user);
  574.             $entityManager->flush();
  575.             $securityController->sendNeueVersandmailadresseEmail($user$urlGenerator$mailer);
  576.         } else {
  577.             $returnData["error"] = true;
  578.             $userProfil $user->getUserProfil();
  579.             $userProfil->setMailversand($neueMail);
  580.             $entityManager->persist($userProfil);
  581.             $entityManager->flush();
  582.         }
  583.         return new JsonResponse($returnData);
  584.     }
  585.     #[Route('/mein_profil/mailadressen/anzeigemail/speichern'name'user_profil_mein_profil_mailadressen_anzeigemail_speichern')]
  586.     public function profilMailadressenAnzeigeMailSpeichern(Request                $request,
  587.                                                            UserProfilRepository   $userProfilRepository,
  588.                                                            EntityManagerInterface $entityManager): Response
  589.     {
  590.         $emailAnzeigen null;
  591.         if (strlen($request->get('email_anzeigen')) > 1) {
  592.             $emailAnzeigen $this->getUser()->getFirmenprofil()->getId() . ',' $request->get('email_anzeigen');
  593.         }
  594.         $userprofil $userProfilRepository->findOneBy(['user' => $this->getUser()]);
  595.         $userprofil->setEmailAnzeigen($emailAnzeigen);
  596.         $entityManager->persist($userprofil);
  597.         $entityManager->flush();
  598.         $returnData["error"] = false;
  599.         return new JsonResponse($returnData);
  600.     }
  601.     #[Route('/mein_profil/ondemand/laden'name'user_profil_mein_profil_ondemand_laden')]
  602.     public function profilOndemandLaden(BuchungenSeminareTeilnehmerRepository $buchungenSeminareTeilnehmerRepository): Response
  603.     {
  604.         return $this->render('user/profil/profil_info_on_demand.html.twig', [
  605.             'bstTermine' => $buchungenSeminareTeilnehmerRepository->findBy(['user' => $this->getUser()->getId()]),
  606.         ]);
  607.     }
  608.     #[Route('/mein_profil/ondemand/ansehen/{bstId}'name'user_profil_mein_profil_ondemand_ansehen')]
  609.     public function user_profil_mein_profil_ondemand_ansehen($bstIdBuchungenSeminareTeilnehmerRepository $buchungenSeminareTeilnehmerRepository): Response
  610.     {
  611.         return $this->render('user/profil/profil_info_on_demand_ansehen.html.twig', [
  612.             'bstTermin' => $buchungenSeminareTeilnehmerRepository->findOneBy(['id' => $bstId'user' => $this->getUser()->getId()]),
  613.         ]);
  614.     }
  615.     #[Route('/mein_profil/firma'name'user_profil_mein_profil_firma_laden'methods: ['GET'])]
  616.     public function profilFirma(FirmenMitgliederanfrageRepository $firmenMitgliederanfrageRepository,
  617.                                 UserNotificationRepository        $notificationRepository,
  618.                                 AdminSecurityRoleRepository       $adminSecurityRoleRepository,
  619.                                 EntityManagerInterface            $entityManager): Response
  620.     {
  621.         $anfrage 0;
  622.         $firmenprofil null;
  623.         $firmenid $this->getUser()?->getFirmenProfil()?->getId();
  624.         if ($firmenid == null) {
  625.             $userFirmenanfrage $firmenMitgliederanfrageRepository->findOneBy(['user' => $this->getUser()->getId()]);
  626.             if ($userFirmenanfrage != null) {
  627.                 $firmenprofil $userFirmenanfrage->getFirma();
  628.                 $anfrage 1;
  629.             }
  630.         } else {
  631.             $firmenprofil $this->getUser()->getFirmenProfil();
  632.         }
  633.         $notifications $notificationRepository->findBy(['type' => 4'user' => $this->getUser()->getId()]);
  634.         foreach ($notifications as $notification) {
  635.             $entityManager->remove($notification);
  636.             $entityManager->flush();
  637.         }
  638.         return $this->render('user/profil/profil_firmenbewerbung.html.twig', [
  639.             'anfrage' => $anfrage,
  640.             'firma' => $firmenprofil,
  641.             'adminroles' => $adminSecurityRoleRepository->findAll(),
  642.         ]);
  643.     }
  644.     #[Route('/mein_profil/firmencode/senden'name'user_profil_firmencode_senden')]
  645.     public function userProfilFirmencodeSenden(Request                $request,
  646.                                                EntityManagerInterface $entityManager,
  647.                                                FirmenprofilRepository $firmenprofilRepository,
  648.                                                UserRepository         $userRepository): Response
  649.     {
  650.         $firmencode $request->get('firmencode');
  651.         $firmaGefunden null;
  652.         if ($firmencode != null) {
  653.             if (str_starts_with($firmencode"C-")) {
  654.                 $code explode('-'$firmencode3);
  655.                 if (count($code) == 3) {
  656.                     if (is_numeric($code[1])) {
  657.                         $firmaGefunden $firmenprofilRepository->findOneBy(['id' => (int)$code[1], 'firmencode' => $code[2]]);
  658.                     }
  659.                 }
  660.             }
  661.         }
  662.         if ($firmaGefunden != null) {
  663.             $userProfil $userRepository->findOneBy(['id' => $this->getUser()->getId()]);
  664.             $beiFirmaAnmelden = new FirmenMitgliederanfrage();
  665.             $beiFirmaAnmelden->setUser($userProfil);
  666.             $beiFirmaAnmelden->setDatum(new \DateTime('now', new \DateTimeZone('Europe/Berlin')));
  667.             $beiFirmaAnmelden->setFirma($firmaGefunden);
  668.             $entityManager->persist($beiFirmaAnmelden);
  669.             $entityManager->flush();
  670.             $alleFirmenmitglieder $userRepository->findBy(['firmen_profil' => $firmaGefunden]);
  671.             foreach ($alleFirmenmitglieder as $firmenmitglied) {
  672.                 if (in_array("ROLE_FIRMA_ADMIN_MITGLIEDER_RECHTE"$firmenmitglied->getRoles())) {
  673.                     $neueNotification = new UserNotification();
  674.                     $neueNotification->setUser($firmenmitglied);
  675.                     $neueNotification->setVonUserId($this->getUser()->getId());
  676.                     $neueNotification->setUserName($this->getUser()->getuserProfil()->getNachname() . ' ' $this->getUser()->getuserProfil()->getVorname());
  677.                     $neueNotification->setType(3);
  678.                     $neueNotification->setDatum(new \DateTime('now', new \DateTimeZone('Europe/Berlin')));
  679.                     $neueNotification->setGelesen(0);
  680.                     $neueNotification->setText('Anfrage Firmenmitglied');
  681.                     $neueNotification->setLink('admin_start_neue_mitglieder');
  682.                     $entityManager->persist($neueNotification);
  683.                     $entityManager->flush();
  684.                 }
  685.             }
  686.             $returnData["error"] = false;
  687.             return new JsonResponse($returnData);
  688.         }
  689.         $returnData["error"] = true;
  690.         return new JsonResponse($returnData);
  691.     }
  692.     #[Route('/mein_profil/firmencode/abbrechen/{firmenId}'name'user_profil_firmencode_abbrechen')]
  693.     public function userProfilFirmencodeAbbrechen(Request                           $request$firmenIdEntityManagerInterface $entityManager,
  694.                                                   FirmenDateimanagerRepository      $firmenDateimanagerRepository,
  695.                                                   FirmenMitgliederanfrageRepository $firmenMitgliederanfrageRepository,
  696.                                                   FirmenprofilRepository            $firmenprofilRepository,
  697.                                                   MailsWarteschleifeController      $mailsWarteschleifeController,
  698.                                                   UrlGeneratorInterface             $urlGenerator,
  699.                                                   UserFavoritenRepository           $userFavoritenRepository,
  700.                                                   TokenStorageInterface             $tokenStorage,
  701.                                                   UserRepository                    $userRepository,
  702.                                                   UserRolesGekauftRepository        $userRolesGekauftRepository,
  703.                                                   UserNotificationRepository        $notificationRepository): Response
  704.     {
  705.         $userId $this->getUser()->getId();
  706.         $firmaAnfrage $firmenMitgliederanfrageRepository->findOneBy(['user' => $userId'firma' => $firmenId]);
  707.         if ($firmaAnfrage != null) {
  708.             $entityManager->remove($firmaAnfrage);
  709.             $entityManager->flush();
  710.             $notifications $notificationRepository->findBy(['von_user_id' => $userId'type' => 3]);
  711.             foreach ($notifications as $notification) {
  712.                 $entityManager->remove($notification);
  713.                 $entityManager->flush();
  714.             }
  715.         }
  716.         $user $userRepository->findOneBy(['id' => $userId'firmen_profil' => $firmenId'firmen_profil_boss' => null]);
  717.         if ($user != null) {
  718.             $userRolesExtra $userRolesGekauftRepository->findBy(['user' => $userId]);
  719.             $neueUserRoles = [];
  720.             $neueUserRoles[] = "ROLE_MITGLIED";
  721.             if ($userRolesExtra != null) {
  722.                 foreach ($userRolesExtra as $userRoles) {
  723.                     $neueUserRoles[] = $userRoles->getRole();
  724.                 }
  725.             }
  726.             $firma $firmenprofilRepository->findOneBy(['id' => $firmenId]);
  727.             $alleFirmenmitglieder $userRepository->findBy(['firmen_profil' => $firma]);
  728.             foreach ($alleFirmenmitglieder as $firmenmitglied) {
  729.                 if (in_array("ROLE_FIRMA_ADMIN_MITGLIEDER_RECHTE"$firmenmitglied->getRoles()) && $firmenmitglied->getId() != $userId) {
  730.                     $emailSenden 1;
  731.                     if ($firmenmitglied->getEinstellungen() != null) {
  732.                         $einstellungen json_decode($firmenmitglied->getEinstellungen(), true);
  733.                         if (isset($einstellungen['hatFirmaVerlassen'])) {
  734.                             $emailSenden = (int)$einstellungen['hatFirmaVerlassen'];
  735.                         }
  736.                     }
  737.                     if ($emailSenden == 1) {
  738.                         $optinLink $urlGenerator->generate('admin_firmenadmin_start', [], UrlGeneratorInterface::ABSOLUTE_URL);
  739.                         $optinLink2 $urlGenerator->generate('user_profil_mein_profil_info', ['seite' => 'benachrichtigungen'], UrlGeneratorInterface::ABSOLUTE_URL);
  740.                         $mailsWarteschleifeController->insertMail([
  741.                             'preheader' => 'handwerkXcampus Mitarbeiter*in hat Firmenverbindung gelöscht',
  742.                             'vorname' => $firmenmitglied->getUserProfil()->getVorname(),
  743.                             'nachname' => $firmenmitglied->getUserProfil()->getNachname(),
  744.                             'vornameSender' => $user->getuserProfil()->getVorname(),
  745.                             'nachnameSender' => $user->getuserProfil()->getNachname(),
  746.                             'firmenposition' => $user->getuserProfil()->getFirmenposition(),
  747.                             'optinLink' => $optinLink,
  748.                             'optinLink2' => $optinLink2,
  749.                         ], $_ENV["MAILER_SENDER_NO_REPLY"],
  750.                             $firmenmitglied->getuserProfil()->getMailversand(),
  751.                             'handwerkXcampus Mitarbeiter*in hat Firmenverbindung gelöscht',
  752.                             'emails/benachrichtigung_firma_verlassen.html.twig',
  753.                             'VonFirmaGegangen'0,
  754.                             $firmenmitglied);
  755.                     }
  756.                 }
  757.             }
  758.             //Todo: Chat Upload Kontrolle ob löschen
  759.             foreach ($user->getNotdienste() as $notdienst) {
  760.                 $notdienst->setUser(null);
  761.                 $notdienst->setVorname($user->getUserProfil()->getVorname());
  762.                 $notdienst->setNachname($user->getUserProfil()->getNachname());
  763.                 if ($notdienst->getErsatzUser() == null) {
  764.                     $notdienst->setPushNotificationDatum(null);
  765.                 }
  766.                 $entityManager->persist($notdienst);
  767.             }
  768.             foreach ($user->getNotdiensteErsatz() as $notdienst) {
  769.                 $notdienst->setErsatzUser(null);
  770.                 $notdienst->setErsatzVorname($user->getUserProfil()->getVorname());
  771.                 $notdienst->setErsatzNachname($user->getUserProfil()->getNachname());
  772.                 $notdienst->setPushNotificationDatum(null);
  773.                 $entityManager->persist($notdienst);
  774.             }
  775.             $entityManager->flush();
  776.             $userDateien $firmenDateimanagerRepository->findBy(['user_id' => $user->getId()]);
  777.             foreach ($userDateien as $datei) {
  778.                 $serverFilePath $this->getParameter('admin_ordner') . '/dateimanager/' $user->getFirmenProfil()->getId() . '/' $datei->getSpeichername();
  779.                 $fileSystem = new Filesystem();
  780.                 $fileSystem->remove($serverFilePath);
  781.             }
  782.             $user->setFirmenProfil(null);
  783.             $user->setNeueRoles(null);
  784.             $user->setRoles($neueUserRoles);
  785.             $entityManager->persist($user);
  786.             $entityManager->flush();
  787.             //Benutzer neu einloggen
  788.             $loginController = new LoginController($userFavoritenRepository);
  789.             $loginController->loginUser($user$tokenStorage$request);
  790.         }
  791.         $returnData["error"] = false;
  792.         return new JsonResponse($returnData);
  793.     }
  794.     #[Route('/mein_profil/rechte/aktualisieren'name'user_profil_mein_profil_rechte_aktualisieren')]
  795.     public function user_profil_rechte_aktualisieren(EntityManagerInterface  $entityManager,
  796.                                                      UserRepository          $userRepository,
  797.                                                      UserFavoritenRepository $userFavoritenRepository,
  798.                                                      TokenStorageInterface   $tokenStorage,
  799.                                                      Request                 $request): Response
  800.     {
  801.         $user $userRepository->findOneBy(['id' => $this->getUser()->getId()]);
  802.         if ($user->getNeueRoles() != null) {
  803.             $userNeueRoles $user->getNeueRoles();
  804.             $user->setRoles($userNeueRoles);
  805.             $user->setNeueRoles(null);
  806.             $entityManager->persist($user);
  807.             $entityManager->flush();
  808.             //Benutzer neu einloggen
  809.             $loginController = new LoginController($userFavoritenRepository);
  810.             $loginController->loginUser($user$tokenStorage$request);
  811.         }
  812.         $returnData["error"] = false;
  813.         return new JsonResponse($returnData);
  814.     }
  815.     #[Route('/mein_profil/bearbeiten/speichern'name'user_profil_mein_profil_bearbeiten_speichern')]
  816.     public function userProfilSpeichern(Request                $request,
  817.                                         UserProfilRepository   $userProfilRepository,
  818.                                         DozentRepository       $dozentRepository,
  819.                                         EntityManagerInterface $entityManager,
  820.                                         GoogleMapsController   $googleMapsController,
  821.                                         HttpClientInterface    $httpClient): Response
  822.     {
  823.         $id $this->getUser()->getId();
  824.         $userProfil $userProfilRepository->findOneBy(['user' => $id]);
  825.         $dozent $dozentRepository->findOneBy(['user' => $id]);
  826.         if (strlen($request->get('plz'))) {
  827.             $adresse $request->get('plz');
  828.             if (strlen($request->get('ort'))) {
  829.                 $adresse $adresse ' ' $request->get('ort');
  830.             }
  831.             if (strlen($request->get('strasse'))) {
  832.                 $adresse $adresse ' ' $request->get('strasse');
  833.             }
  834.             $ergebnis $googleMapsController->googleMapsKoordinatenSuchen($adresse$httpClient);
  835.             if (count($ergebnis) > 0) {
  836.                 $userProfil->setGoogleLat($ergebnis[0]['geometry']['location']['lat'] . '');
  837.                 $userProfil->setGoogleLen($ergebnis[0]['geometry']['location']['lng'] . '');
  838.             }
  839.         } else {
  840.             $userProfil->setGoogleLat(null);
  841.             $userProfil->setGoogleLen(null);
  842.         }
  843.         if ($request->get('geburtsdatum') == -1) {
  844.             $userProfil->setGeburtsdatum(null);
  845.         } else {
  846.             $userProfil->setGeburtsdatum(new \DateTime($request->get('geburtsdatum')));
  847.         }
  848.         $userProfil->setVorname($request->get('vorname'));
  849.         $userProfil->setNachname($request->get('nachname'));
  850.         $userProfil->setStrasse($request->get('strasse'));
  851.         $userProfil->setPlz($request->get('plz'));
  852.         $userProfil->setOrt($request->get('ort'));
  853.         $userProfil->setTelefon($request->get('telefon'));
  854.         $userProfil->setMobil($request->get('mobil'));
  855.         $userProfil->setNewsletter($request->get('newsletter'));
  856.         $entityManager->persist($userProfil);
  857.         $entityManager->flush();
  858.         if ($request->get('dozent_anlegen') != '0' || $dozent != null) {
  859.             if ($request->get('dozent_anlegen') == '1' && $dozent == null) {
  860.                 $dozent = new Dozent();
  861.                 $dozent->setUser($userProfil->getUser());
  862.             }
  863.             $dozent->setTelefon($request->get('dozent_telefon'));
  864.             $dozent->setEmail($request->get('dozent_email'));
  865.             $dozent->setFacebook($request->get('dozent_facebook'));
  866.             $dozent->setInstagram($request->get('dozent_instagram'));
  867.             $dozent->setYoutube($request->get('dozent_youtube'));
  868.             $dozent->setVorstellungsvideo($request->get('dozent_vorstellungsvideo'));
  869.             $dozent->setBeschreibung($request->get('dozent_beschreibung'));
  870.             $entityManager->persist($dozent);
  871.             $entityManager->flush();
  872.         }
  873.         $returnData["fehlermeldung"] = false;
  874.         return new JsonResponse($returnData);
  875.     }
  876.     #[Route('/mein_profil/bearbeiten/upload'name'user_profil_mein_profil_bearbeiten_upload')]
  877.     public function schulungUpload(Request $requestSluggerInterface $sluggerUserProfilRepository $userProfilRepository): Response
  878.     {
  879.         $id $this->getUser()->getId();
  880.         $returnData = [];
  881.         $returnData['files'] = [];
  882.         $returnData['files'][0] = [];
  883.         /*        $doctrine = $this->getDoctrine()->getManager();
  884.                 $userProfil = $userProfilRepository->findOneBy(['user' => $id]);*/
  885.         $uploadFile $request->files->all()['files'][0];
  886.         $safeFilename $slugger->slug($uploadFile->getClientOriginalName());
  887.         $newFilename $safeFilename '-' md5(uniqid()) . '.' $uploadFile->guessExtension();
  888.         $mimeType $uploadFile->getMimeType();
  889.         if ($uploadFile->guessExtension() != 'jpg' && $uploadFile->guessExtension() != 'jpeg' && $uploadFile->guessExtension() != 'png') {
  890.             $returnData['files'][0]['error'] = 'Ungültige Datei';
  891.             return new JsonResponse($returnData);
  892.         }
  893.         try {
  894.             $filePath $this->getParameter('user_ordner') . '/' $id '/profilbild_original/';
  895.             $fileSystem = new Filesystem();
  896.             $fileSystem->remove($filePath);
  897.             $uploadFile->move($this->getParameter('user_ordner') . '/' $id '/profilbild_original/'$newFilename);
  898.         } catch (FileException $e) {
  899.             // ... handle exception if something happens during file upload
  900.             $returnData['files'][0]['error'] = 'Es ist ein Fehler beim Upload aufgetreten';
  901.             return new JsonResponse($returnData);
  902.         }
  903.         //$userProfil->setProfilbild($newFilename);
  904.         //$doctrine->persist($userProfil);
  905.         //$doctrine->flush();
  906.         $returnData['files'][0]['name'] = $newFilename;
  907.         $returnData['files'][0]['type'] = $mimeType;
  908.         $returnData['files'][0]['size'] = 0;
  909.         $returnData['files'][0]['thumbnailUrl'] = $this->generateUrl('user_profilbild_original');
  910.         return new JsonResponse($returnData);
  911.     }
  912.     #[Route('/mein_profil/bearbeiten/upload-cropped'name'user_profil_mein_profil_bearbeiten_upload_cropped')]
  913.     public function schulungUploadCropped(Request                $requestSluggerInterface $slugger,
  914.                                           UserProfilRepository   $userProfilRepository,
  915.                                           EntityManagerInterface $entityManager): Response
  916.     {
  917.         $id $this->getUser()->getId();
  918.         $returnData = [];
  919.         $returnData['success'] = false;
  920.         $userProfil $userProfilRepository->findOneBy(['user' => $id]);
  921.         $uploadFile $request->files->all()['croppedImage'];
  922.         //$filename = md5(uniqid()) . '.png';
  923.         //$safeFilename = $slugger->slug($uploadFile->getClientOriginalName());
  924.         $filename md5(uniqid()) . '.png';
  925.         if ($uploadFile->guessExtension() != 'png') {
  926.             $returnData['message'] = 'Ungültige Datei';
  927.             return new JsonResponse($returnData);
  928.         }
  929.         try {
  930.             $fileSystem = new Filesystem();
  931.             $filePath $this->getParameter('user_ordner') . '/' $id '/profilbild/';
  932.             $fileSystem->remove($filePath);
  933.             $uploadFile->move($this->getParameter('user_ordner') . '/' $id '/profilbild/'$filename);
  934.             $filePath $this->getParameter('user_ordner') . '/' $id '/profilbild_original/';
  935.             $fileSystem->remove($filePath);
  936.         } catch (FileException $e) {
  937.             // ... handle exception if something happens during file upload
  938.             $returnData['message'] = 'Es ist ein Fehler beim Upload aufgetreten';
  939.             return new JsonResponse($returnData);
  940.         }
  941.         $userProfil->setProfilbild($filename);
  942.         $entityManager->persist($userProfil);
  943.         $entityManager->flush();
  944.         $returnData['success'] = true;
  945.         return new JsonResponse($returnData);
  946.     }
  947.     #[Route('/mein_profil/bearbeiten/profilbild_loeschen'name'user_profil_mein_profil_bearbeiten_profilbild_loeschen')]
  948.     public function user_profil_mein_profil_bearbeiten_profilbild_loeschen(UserProfilRepository   $userProfilRepository,
  949.                                                                            EntityManagerInterface $entityManager): Response
  950.     {
  951.         $id $this->getUser()->getId();
  952.         $returnData['error'] = false;
  953.         $userProfil $userProfilRepository->findOneBy(['user' => $id]);
  954.         if ($userProfil != null) {
  955.             $userProfil->setProfilbild(null);
  956.             $entityManager->persist($userProfil);
  957.             $entityManager->flush();
  958.             try {
  959.                 $fileSystem = new Filesystem();
  960.                 $filePath $this->getParameter('user_ordner') . '/' $id '/profilbild/';
  961.                 $fileSystem->remove($filePath);
  962.             } catch (FileException $e) {
  963.                 $returnData['message'] = 'Es ist ein Fehler beim Löschen aufgetreten';
  964.                 return new JsonResponse($returnData);
  965.             }
  966.         }
  967.         return new JsonResponse($returnData);
  968.     }
  969.     // Bild einbinden aus dem var Ordner mit Berechtigungsabfrage
  970.     #[Route('/mein_profil/profilbild_original'name'user_profilbild_original')]
  971.     public function meinProfilbildOriginal(Request $requestUserProfilRepository $userProfilRepository): Response
  972.     {
  973.         $id $this->getUser()->getId();
  974.         $folderPath $this->getParameter('user_ordner') . '/' $id '/profilbild_original/';
  975.         $finder = new Finder();
  976.         $finder->files()->in($folderPath);
  977.         $filePath null;
  978.         if ($finder->hasResults()) {
  979.             foreach ($finder as $file) {
  980.                 $filePath $file->getRealPath();
  981.             }
  982.         }
  983.         if ($filePath != null) {
  984.             return new BinaryFileResponse($filePath);
  985.         }
  986.         return new JsonResponse('File not found'404);
  987.     }
  988.     #[Route('/mein_profil/zertifikat/interne_schulungen_download/{id}'name'user_zertifikat_interne_schulungen_download')]
  989.     public function user_zertifikat_interne_schulungen_download($idFirmenInterneSchulungenZertifikatRepository $zertifikatRepository,
  990.                                                                 FirmenInterneSchulungenRepository $firmenInterneSchulungenRepository): Response
  991.     {
  992.         $zertifikat $zertifikatRepository->findOneBy(['id' => $id'user' => $this->getUser()]);
  993.         $datum = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
  994.         $heuteUS $datum->format("YmdHis");
  995.         if ($zertifikat != null) {
  996.             $filePath $this->getParameter('zertifikat_ordner_user') . '/' $this->getUser()->getId() . '/zertifikate/' $id '.pdf';
  997.             $schulung $firmenInterneSchulungenRepository->findOneBy(['id' => $zertifikat->getFirmenSchulungId()]);
  998.             if ($schulung != null && $schulung->getStatus() == 1) {
  999.                 $mpdf = new \Mpdf\Mpdf([
  1000.                     'mode' => 'utf-8',
  1001.                     'fontDir' => [
  1002.                         $this->getParameter('font_ordner'),
  1003.                     ],
  1004.                     'fontdata' => [
  1005.                         'roboto' => [
  1006.                             'R' => 'Roboto-Light.ttf',
  1007.                             'B' => 'Roboto-Bold.ttf',
  1008.                             'I' => 'Roboto-Medium.ttf',
  1009.                         ],
  1010.                     ],
  1011.                     'default_font' => 'roboto'
  1012.                 ]);
  1013.                 $mpdf->SetTitle('Zertifikat');
  1014.                 $mpdf->SetAuthor('CELSEO Service GmbH');
  1015.                 $mpdf->SetSubject($zertifikat->getCelseoSchulung()->getTitel());
  1016.                 $mpdf->SetKeywords($zertifikat->getCelseoSchulung()->getSchulungsbereich());
  1017.                 $pagecount $mpdf->setSourceFile($filePath);
  1018.                 $tplIdx $mpdf->importPage($pagecount);
  1019.                 $mpdf->useTemplate($tplIdx);
  1020.                 $mpdf->SetWatermarkText('MUSTERZERTIFIKAT');
  1021.                 $mpdf->watermarkTextAlpha 0.1;
  1022.                 $mpdf->watermarkImageAlpha 0.5;
  1023.                 $mpdf->showWatermarkText true;
  1024.                 $mpdf->Output($heuteUS '_Zertifikat.pdf'\Mpdf\Output\Destination::INLINE);
  1025.                 return new BinaryFileResponse($mpdf);
  1026.             }
  1027.         }
  1028.         return new BinaryFileResponse($filePath);
  1029.     }
  1030.     // Bild einbinden aus dem var Ordner mit Berechtigungsabfrage
  1031.     #[Route('/mein_profil/profilbild'name'user_profilbild')]
  1032.     public function meinProfilbild(Request $requestUserProfilRepository $userProfilRepository): Response
  1033.     {
  1034.         $id $this->getUser()->getId();
  1035.         $userProfil $userProfilRepository->findOneBy(['user' => $id]);
  1036.         $filePath $this->getParameter('user_ordner') . '/' $id '/profilbild/' $userProfil->getProfilbild();
  1037.         //return new JsonResponse("", 403);
  1038.         return new BinaryFileResponse($filePath);
  1039.     }
  1040. }