src/Controller/userController/FirmaController.php line 43

Open in your IDE?
  1. <?php
  2. namespace App\Controller\userController;
  3. use App\Controller\basisController\UserBasisController;
  4. use App\Entity\FirmenDateimanagerDownload;
  5. use App\Entity\FirmenNewsEventEntscheidungGrund;
  6. use App\Repository\BuchungenRepository;
  7. use App\Repository\ChatRepository;
  8. use App\Repository\EmailWarteschlangeRepository;
  9. use App\Repository\FirebaseNotificationWarteschlangeRepository;
  10. use App\Repository\FirmenDateienRepository;
  11. use App\Repository\FirmenDateimanagerDownloadRepository;
  12. use App\Repository\FirmenDateimanagerRepository;
  13. use App\Repository\FirmenDokumenteRepository;
  14. use App\Repository\FirmenDokumenteRubrikenRepository;
  15. use App\Repository\FirmenGruppenRepository;
  16. use App\Repository\FirmenInterneSchulungenInhaltRepository;
  17. use App\Repository\FirmenInterneSchulungenRepository;
  18. use App\Repository\FirmenInterneSchulungInhaltSprachenRepository;
  19. use App\Repository\FirmenNewsAnhangRepository;
  20. use App\Repository\FirmenNewsRepository;
  21. use App\Repository\FirmenprofilRepository;
  22. use App\Repository\FirmenUmfragenRepository;
  23. use App\Repository\NotdienstRepository;
  24. use App\Repository\SchulungenRepository;
  25. use App\Repository\UserEmpfehlungenRepository;
  26. use App\Repository\UserNotificationRepository;
  27. use App\Repository\UserRepository;
  28. use Doctrine\ORM\EntityManagerInterface;
  29. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  30. use Symfony\Component\HttpFoundation\JsonResponse;
  31. use Symfony\Component\HttpFoundation\Request;
  32. use Symfony\Component\HttpFoundation\Response;
  33. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  34. use Symfony\Component\Routing\Annotation\Route;
  35. class FirmaController extends UserBasisController
  36. {
  37.     #[Route('/user/firma/startseite/{id}/{seite}'name'user_firma')]
  38.     public function index($id$seite,
  39.                           NotdienstRepository $notdienstRepository,
  40.                           ChatRepository $chatRepository,
  41.                           UserNotificationRepository $notificationRepository,
  42.                           UserEmpfehlungenRepository $userEmpfehlungenRepository,
  43.                           FirmenInterneSchulungenRepository $firmenInterneSchulungenRepository,
  44.                           FirmenDateimanagerRepository $firmenDateimanagerRepository,
  45.                           FirmenDokumenteRubrikenRepository $dokumenteRubrikenRepository,
  46.                           FirmenNewsRepository $firmenNewsRepository,
  47.                           FirmenUmfragenRepository $firmenUmfragenRepository,
  48.                           FirmenGruppenRepository $firmenGruppenRepository,
  49.                           FirmenDokumenteRepository $firmenDokumenteRepository,
  50.                           EntityManagerInterface $entityManager): Response
  51.     {
  52.         $firmenmitglieder $this->getUserBC_FirmenmitgliederGeordnet();
  53.         $notifications $notificationRepository->findBy(['user' => $this->getUser()->getId()]);
  54.         $dateien $firmenDateimanagerRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()], ['upload_datum' => 'DESC']);
  55.         $dokumente $firmenDokumenteRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()], ['upload_datum' => 'DESC']);
  56.         $rubriken $dokumenteRubrikenRepository->findBy(['firma' => [null$this->getUser()->getFirmenProfil()->getId()]], ['rubrik' => 'ASC']);
  57.         $alleFirmengruppen $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()], ['name' => 'ASC']);
  58.         $alleSchulungen $firmenInterneSchulungenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil(), 'sichtbar' => 1'status' => [0123]]);
  59.         $chatNachrichten $chatRepository->findBy(['user_id' => $firmenmitglieder]);
  60.         $empfehlungen1 $userEmpfehlungenRepository->findBy(['user' => $this->getUser(), 'firma' => $this->getUser()->getFirmenProfil()->getId()]);
  61.         $empfehlungen2 $userEmpfehlungenRepository->findBy(['von_user_id' => $this->getUser()->getId(), 'firma' => $this->getUser()->getFirmenProfil()->getId()]);
  62.         $empfehlungen array_merge($empfehlungen1$empfehlungen2);
  63.         $news $firmenNewsRepository->findBy(['event' => 0'aktiv' => 1'firma' => $this->getUser()->getFirmenProfil()->getId()], ['datum' => 'DESC']);
  64.         $erlaubteNewsIDs = [];
  65.         if ($news != null) {
  66.             foreach ($news as $new) {
  67.                 if ($this->getRechteTabellenzeileId($new->getSichtbar(), $new->getZugriffsrechte(), $alleFirmengruppen)) {
  68.                     $erlaubteNewsIDs[] = $new->getId();
  69.                 }
  70.             }
  71.         }
  72.         $erlaubteNews = [];
  73.         if (count($erlaubteNewsIDs) > 0) {
  74.             $erlaubteNews $firmenNewsRepository->findBy(['id' => $erlaubteNewsIDs], ['datum' => 'DESC']);
  75.         }
  76.         $events $firmenNewsRepository->findBy(['event' => [12], 'aktiv' => 1'firma' => $this->getUser()->getFirmenProfil()->getId()], ['datum' => 'DESC']);
  77.         $erlaubteEventIDs = [];
  78.         if ($events != null) {
  79.             foreach ($events as $event) {
  80.                 if ($this->getRechteTabellenzeileId($event->getSichtbar(), $event->getZugriffsrechte(), $alleFirmengruppen)) {
  81.                     $erlaubteEventIDs[] = $event->getId();
  82.                 }
  83.             }
  84.         }
  85.         $erlaubteEvents = [];
  86.         if (count($erlaubteEventIDs) > 0) {
  87.             $erlaubteEvents $firmenNewsRepository->findBy(['id' => $erlaubteEventIDs], ['datum' => 'DESC']);
  88.         }
  89.         $umfragen $firmenUmfragenRepository->findBy(['aktiv' => 1'firma' => $this->getUser()->getFirmenProfil()->getId()], ['datum' => 'DESC']);
  90.         $erlaubteUmfragenIDs = [];
  91.         if ($umfragen != null) {
  92.             foreach ($umfragen as $umfrage) {
  93.                 if ($this->getRechteTabellenzeileId($umfrage->getRechte(), $umfrage->getZugriffsrechte(), $alleFirmengruppen)) {
  94.                     $erlaubteUmfragenIDs[] = $umfrage->getId();
  95.                 }
  96.             }
  97.         }
  98.         $erlaubteUmfragen = [];
  99.         if (count($erlaubteUmfragenIDs) > 0) {
  100.             $erlaubteUmfragen $firmenUmfragenRepository->findBy(['id' => $erlaubteUmfragenIDs], ['datum' => 'DESC']);
  101.         }
  102.         $umfrageAbgeschlossenIDs = [];
  103.         foreach ($erlaubteUmfragen as $erlaubteUmfrage) {
  104.             $ids $erlaubteUmfrage->getAbgeschlossen() == null ? [] : json_decode($erlaubteUmfrage->getAbgeschlossen(), true);
  105.             if (in_array($this->getUser()->getId(), $ids)) {
  106.                 $umfrageAbgeschlossenIDs[] = $erlaubteUmfrage->getId();
  107.             }
  108.         }
  109.         $firmengruppenChats = [];
  110.         foreach ($alleFirmengruppen as $firmengruppe) {
  111.             if ($firmengruppe->getChatAktiv() == 1) {
  112.                 $firmengruppeUser json_decode($firmengruppe->getGruppenMitarbeiter(), true);
  113.                 if (in_array($this->getUser()->getId(), $firmengruppeUser)) {
  114.                     $anzahlUser 0;
  115.                     foreach ($firmenmitglieder as $firmenmitglied) {
  116.                         if (in_array($firmenmitglied->getId(), $firmengruppeUser)) {
  117.                             $anzahlUser $anzahlUser 1;
  118.                         }
  119.                     }
  120.                     $arrayFirmengruppen = [];
  121.                     $arrayFirmengruppen['id'] = $firmengruppe->getId();
  122.                     $arrayFirmengruppen['name'] = $firmengruppe->getName();
  123.                     $arrayFirmengruppen['anzahl'] = $anzahlUser;
  124.                     $arrayFirmengruppen['projekt'] = $firmengruppe?->getProjekt()?->getId();
  125.                     $firmengruppenChats[] = $arrayFirmengruppen;
  126.                 }
  127.             }
  128.         }
  129.         $RechteDateienArr = [];
  130.         if ($dateien != null) {
  131.             foreach ($dateien as $datei) {
  132.                 $rechte json_decode($datei->getDownloadRechte(), true);
  133.                 $rechteDaten = [];
  134.                 $rechteDaten['dateiId'] = $datei->getId();
  135.                 $rechteDaten['datei'] = $rechte;
  136.                 $RechteDateienArr[] = $rechteDaten;
  137.             }
  138.         }
  139.         $DokumenteArr = [];
  140.         if ($dokumente != null) {
  141.             foreach ($dokumente as $dokument) {
  142.                 $rechteSpeichern false;
  143.                 if ($this->getRechteTabellenzeileId($dokument->getDownloadRechte(), $dokument->getZugriffsrechte(), $alleFirmengruppen)) {
  144.                     $rechteSpeichern true;
  145.                 }
  146.                 if ($rechteSpeichern) {
  147.                     $rechteDaten = [];
  148.                     $rechteDaten['rubrikId'] = $dokument->getRubrik()->getId();
  149.                     $rechteDaten['dokumentId'] = $dokument->getId();
  150.                     $rechteDaten['dokumentName'] = $dokument->getDateiname();
  151.                     $rechteDaten['bestaetigungAnfordern'] = $dokument->getBestaetigungAnfordern();
  152.                     $rechteDaten['bestaetigungen'] = $dokument->getBestaetigungen();
  153.                     $rechteDaten['rechte'] = $dokument->getDownloadRechte();
  154.                     $DokumenteArr[] = $rechteDaten;
  155.                 }
  156.             }
  157.         }
  158.         $schulungen = [];
  159.         foreach ($alleSchulungen as $alleSchulung) {
  160.             if ($this->getRechteTabellenzeileId($alleSchulung->getRechte(), $alleSchulung->getZugriffsrechte(), $alleFirmengruppen)) {
  161.                 $schulungen[] = $alleSchulung;
  162.             }
  163.         }
  164.         $notdienste $notdienstRepository->findKommendeNotdiensteUser($this->getUser()->getFirmenProfil()->getId(), $this->getUser()->getId());
  165.         $i 0;
  166.         foreach ($notdienste as $notdienst) {
  167.             $i++;
  168.             if ($i 4) {
  169.                 if ($notdienst->getGelesen() == 0) {
  170.                     $notdienst->setGelesen(1);
  171.                 } elseif ($notdienst->getGelesen() == 2) {
  172.                     $notdienst->setGelesen(3);
  173.                 }
  174.                 $entityManager->persist($notdienst);
  175.                 $entityManager->flush();
  176.             } else {
  177.                 break;
  178.             }
  179.         }
  180.         return $this->render('user/firma/firma_info.html.twig', [
  181.             'firmenmitglieder' => $firmenmitglieder,
  182.             'lable' => $this->getLableInternerBereich(),
  183.             'id' => $id,
  184.             'seite' => $seite,
  185.             'alleDateien' => $dateien,
  186.             'freigaben' => $RechteDateienArr,
  187.             'freigabenDokumente' => $DokumenteArr,
  188.             'rubriken' => $rubriken,
  189.             'notifications' => $notifications,
  190.             'firmengruppenChats' => $firmengruppenChats,
  191.             'alleNews' => $erlaubteNews,
  192.             'alleEvents' => $erlaubteEvents,
  193.             'alleUmfragen' => $erlaubteUmfragen,
  194.             'umfrageAbgeschlossenIDs' => $umfrageAbgeschlossenIDs,
  195.             'schulungen' => $schulungen,
  196.             'chatNachrichten' => $chatNachrichten,
  197.             'empfehlungen' => $empfehlungen,
  198.             'notdienste' => $notdienste,
  199.         ]);
  200.     }
  201.     #[Route('/user/firma/notdienst'name'user_firma_notdienst')]
  202.     public function user_firma_notdienst(NotdienstRepository $notdienstRepository): Response
  203.     {
  204.         $notdienste $notdienstRepository->findNotdiensteUserseite($this->getUser()->getFirmenProfil()->getId());
  205.         return $this->render('user/firma/notdienst.html.twig', [
  206.             'notdienste' => $notdienste,
  207.             'lable' => $this->getLableInternerBereich(),
  208.         ]);
  209.     }
  210.     #[Route('/user/firma/notdienst_auf_gelesen_setzen'name'user_firma_notdienst_auf_gelesen_setzen')]
  211.     public function user_firma_notdienst_auf_gelesen_setzen(Request                $requestNotdienstRepository $notdienstRepository,
  212.                                                             EntityManagerInterface $entityManager): Response
  213.     {
  214.         $notdienstIDs $request->get('ungelesenIDs');
  215.         $notdienste $notdienstRepository->findBy(['id' => $notdienstIDs'firma' => $this->getUser()->getFirmenprofil()]);
  216.         foreach ($notdienste as $notdienst) {
  217.             if ($notdienst->getUser()?->getId() == $this->getUser()->getId()) {
  218.                 if ($notdienst->getGelesen() == 0) {
  219.                     $notdienst->setGelesen(1);
  220.                     $entityManager->persist($notdienst);
  221.                 }
  222.                 if ($notdienst->getGelesen() == 2) {
  223.                     $notdienst->setGelesen(3);
  224.                     $entityManager->persist($notdienst);
  225.                 }
  226.             }
  227.             if ($notdienst->getErsatzUser()?->getId() == $this->getUser()->getId()) {
  228.                 if ($notdienst->getGelesenErsatz() == 0) {
  229.                     $notdienst->setGelesenErsatz(1);
  230.                     $entityManager->persist($notdienst);
  231.                 }
  232.                 if ($notdienst->getGelesenErsatz() == 2) {
  233.                     $notdienst->setGelesenErsatz(3);
  234.                     $entityManager->persist($notdienst);
  235.                 }
  236.             }
  237.         }
  238.         $entityManager->flush();
  239.         $returnData['error'] = false;
  240.         return new JsonResponse($returnData);
  241.     }
  242.     #[Route('/user/firma/notdienst_bestaetigen'name'user_firma_notdienst_bestaetigen')]
  243.     public function user_firma_notdienst_bestaetigen(Request                $request,
  244.                                                      NotdienstRepository    $notdienstRepository,
  245.                                                      EntityManagerInterface $entityManager): Response
  246.     {
  247.         $returnData['error'] = false;
  248.         $id $request->get('notdienstId');
  249.         $notdienst $notdienstRepository->findOneBy(['id' => $id'firma' => $this->getUser()->getFirmenprofil()]);
  250.         if ($notdienst != null && ($notdienst->getUser()->getId() == $this->getUser()->getId() || $notdienst->getErsatzUser()->getId() == $this->getUser()->getId())) {
  251.             if ($notdienst->getUser()?->getId() == $this->getUser()->getId()) {
  252.                 $notdienst->setGelesen(4);
  253.             }
  254.             if ($notdienst->getErsatzUser()?->getId() == $this->getUser()->getId()) {
  255.                 $notdienst->setGelesenErsatz(4);
  256.             }
  257.             $entityManager->persist($notdienst);
  258.             $entityManager->flush();
  259.             $returnData['error'] = false;
  260.         }
  261.         return new JsonResponse($returnData);
  262.     }
  263.     #[Route('/user/firma/notdienst_alle_bestaetigen'name'user_firma_notdienst_alle_bestaetigen')]
  264.     public function user_firma_notdienst_alle_bestaetigen(Request                $request,
  265.                                                           NotdienstRepository    $notdienstRepository,
  266.                                                           EntityManagerInterface $entityManager): Response
  267.     {
  268.         $returnData['error'] = false;
  269.         $bestaetigungenIDs $request->get('bestaetigungenIDs');
  270.         $notdienste $notdienstRepository->findBy(['id' => $bestaetigungenIDs'firma' => $this->getUser()->getFirmenprofil()]);
  271.         foreach ($notdienste as $notdienst) {
  272.             if ($notdienst != null && ($notdienst->getUser()?->getId() == $this->getUser()->getId() || $notdienst->getErsatzUser()?->getId() == $this->getUser()->getId())) {
  273.                 if ($notdienst->getUser()?->getId() == $this->getUser()->getId()) {
  274.                     $notdienst->setGelesen(4);
  275.                     $entityManager->persist($notdienst);
  276.                 }
  277.                 if ($notdienst->getErsatzUser()?->getId() == $this->getUser()->getId()) {
  278.                     $notdienst->setGelesenErsatz(4);
  279.                     $entityManager->persist($notdienst);
  280.                 }
  281.             }
  282.         }
  283.         $entityManager->flush();
  284.         return new JsonResponse($returnData);
  285.     }
  286.     #[Route('/user/firma/notdienst_uebernehmen'name'user_firma_notdienst_uebernehmen')]
  287.     public function user_firma_notdienst_uebernehmen(Request                $request,
  288.                                                      NotdienstRepository    $notdienstRepository,
  289.                                                      EntityManagerInterface $entityManager): Response
  290.     {
  291.         $returnData['error'] = true;
  292.         $returnData['art'] = 1;
  293.         $returnData['hinweis'] = 'Dieser Notdienst wurde bereits von jemand anderen Ã¼bernommen.';
  294.         $id $request->get('notdienstId');
  295.         $notdienst $notdienstRepository->findOneBy(['id' => $id'firma' => $this->getUser()->getFirmenprofil()]);
  296.         if ($notdienst != null) {
  297.             $notdienstVorhanden $notdienstRepository->findNotdienstBereitsEingeteilt($this->getUser()->getFirmenprofil(), $this->getUser()->getId(), $notdienst->getVon(), $notdienst->getId());
  298.             $datenSpeichern true;
  299.             $momentanesStartDatumUS $notdienst->getVon()->format('YmdHis');
  300.             $momentanesEndeDatumUS $notdienst->getBis()->format('YmdHis');
  301.             foreach ($notdienstVorhanden as $vorhanden) {
  302.                 $kontrolleStartDatumUS $vorhanden->getVon()->format('YmdHis');
  303.                 $kontrolleEndeDatumUS $vorhanden->getBis()->format('YmdHis');
  304.                 if (($kontrolleStartDatumUS >= $momentanesStartDatumUS && $kontrolleStartDatumUS $momentanesEndeDatumUS) || ($kontrolleEndeDatumUS $momentanesStartDatumUS && $kontrolleEndeDatumUS <= $momentanesEndeDatumUS)) {
  305.                     $datenSpeichern false;
  306.                 }
  307.                 if (($momentanesStartDatumUS >= $kontrolleStartDatumUS && $momentanesStartDatumUS $kontrolleEndeDatumUS) || ($momentanesEndeDatumUS $kontrolleStartDatumUS && $momentanesEndeDatumUS <= $kontrolleEndeDatumUS)) {
  308.                     $datenSpeichern false;
  309.                 }
  310.             }
  311.             if ($datenSpeichern) {
  312.                 if ($notdienst->getUser() == null && $notdienst->getVorname() == null) {
  313.                     $notdienst->setUser($this->getUser());
  314.                     if ($notdienst->getGelesen() < 2) {
  315.                         $notdienst->setGelesen(1);
  316.                     } else {
  317.                         $notdienst->setGelesen(4);
  318.                     }
  319.                     $notdienst->setVorschlagAnMitarbeiterIds(null);
  320.                     $notdienst->setPushNotificationDatum($notdienst->getVon());
  321.                     $entityManager->persist($notdienst);
  322.                     $returnData['error'] = false;
  323.                 } else {
  324.                     if ($notdienst->getErsatzUser() == null && $notdienst->getErsatzVorname() == null) {
  325.                         $notdienst->setErsatzUser($this->getUser());
  326.                         if ($notdienst->getGelesenErsatz() < 2) {
  327.                             $notdienst->setGelesenErsatz(1);
  328.                         } else {
  329.                             $notdienst->setGelesenErsatz(4);
  330.                         }
  331.                         $notdienst->setVorschlagAnMitarbeiterIds(null);
  332.                         $notdienst->setPushNotificationDatum($notdienst->getVon());
  333.                         $entityManager->persist($notdienst);
  334.                         $returnData['error'] = false;
  335.                     }
  336.                 }
  337.                 $entityManager->flush();
  338.             } else {
  339.                 $returnData['art'] = 2;
  340.                 $returnData['hinweis'] = 'Du hast bereits Notdienst in diesem Zeitraum und kannst nicht annehmen.';
  341.             }
  342.         }
  343.         return new JsonResponse($returnData);
  344.     }
  345.     #[Route('/user/firma/notdienst_ablehnen'name'user_firma_notdienst_ablehnen')]
  346.     public function user_firma_notdienst_ablehnen(Request                $request,
  347.                                                   NotdienstRepository    $notdienstRepository,
  348.                                                   EntityManagerInterface $entityManager): Response
  349.     {
  350.         $returnData['error'] = true;
  351.         $id $request->get('notdienstId');
  352.         $notdienst $notdienstRepository->findOneBy(['id' => $id'firma' => $this->getUser()->getFirmenprofil()]);
  353.         if ($notdienst != null && $notdienst->getVorschlagAnMitarbeiterIds() != null) {
  354.             $abgelehntIDs $notdienst->getVorschlagAbgelehntIds() == null ? [] : json_decode($notdienst->getVorschlagAbgelehntIds(), true);
  355.             $abgelehntIDs[] = $this->getUser()->getId();
  356.             $notdienst->setVorschlagAbgelehntIds(json_encode($abgelehntIDs));
  357.             $entityManager->persist($notdienst);
  358.             $returnData['error'] = false;
  359.             $entityManager->flush();
  360.         }
  361.         return new JsonResponse($returnData);
  362.     }
  363.     #[Route('/user/firma/dateien/{fenster}'name'user_firma_dateien')]
  364.     public function user_firma_dateien($fensterUserNotificationRepository $notificationRepository,
  365.                                        EntityManagerInterface $entityManager,
  366.                                        FirmenDateimanagerRepository $firmenDateimanagerRepository): Response
  367.     {
  368.         $userId $this->getUser()->getId();
  369.         $alleFirmendateien $firmenDateimanagerRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()]);
  370.         $empfangeneDateienIDs = [];
  371.         if ($alleFirmendateien != null) {
  372.             foreach ($alleFirmendateien as $datei) {
  373.                 if ($datei->getDownloadRechte() != null) {
  374.                     $downloadRechte json_decode($datei->getDownloadRechte(), true);
  375.                     foreach ($downloadRechte['rechte'] as $rechte) {
  376.                         if ($rechte['userId'] == $userId) {
  377.                             $empfangeneDateienIDs[] = $datei->getId();
  378.                             break;
  379.                         }
  380.                     }
  381.                 }
  382.             }
  383.         }
  384.         $empfangeneDateien $firmenDateimanagerRepository->findBy(['id' => $empfangeneDateienIDs], ['upload_datum' => 'DESC']);
  385.         $gesendeteDateien $firmenDateimanagerRepository->findBy(['user_id' => $this->getUser()->getId()], ['upload_datum' => 'DESC']);
  386.         $notificationsDateien $notificationRepository->findBy(['user' => $this->getUser()->getId(), 'type' => 1]);
  387.         if ($notificationsDateien != null) {
  388.             foreach ($notificationsDateien as $notificationsDatei) {
  389.                 $entityManager->remove($notificationsDatei);
  390.                 $entityManager->flush();
  391.             }
  392.         }
  393.         return $this->render('user/firma/dateien.html.twig', [
  394.             'firmenmitglieder' => $this->getUserBC_Firmenmitglieder_ohne_provisorischer_mitarbeiter(),
  395.             'lable' => $this->getLableInternerBereich(),
  396.             'empfangeneDateien' => $empfangeneDateien,
  397.             'gesendeteDateien' => $gesendeteDateien,
  398.             'fenster' => $fenster,
  399.         ]);
  400.     }
  401.     #[Route('/user/firma/dokumente/{rubrik}'name'user_firma_dokumente')]
  402.     public function user_firma_dokumente($rubrik,
  403.                                          UserNotificationRepository $notificationRepository,
  404.                                          FirmenDokumenteRubrikenRepository $dokumenteRubrikenRepository,
  405.                                          FirmenGruppenRepository $firmenGruppenRepository,
  406.                                          EntityManagerInterface $entityManager,
  407.                                          FirmenDokumenteRepository $firmenDokumenteRepository): Response
  408.     {
  409.         $lable $this->getLableInternerBereich();
  410.         $rubrikName 'Alle ' $lable['dokumente'];
  411.         if ($rubrik == 0) {
  412.             $dokumente $firmenDokumenteRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()], ['upload_datum' => 'DESC']);
  413.         } else {
  414.             $ausgewaehlteRubrik $dokumenteRubrikenRepository->findOneBy(['id' => $rubrik]);
  415.             $dokumente $firmenDokumenteRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId(), 'rubrik' => $ausgewaehlteRubrik], ['upload_datum' => 'DESC']);
  416.             $rubrikName $ausgewaehlteRubrik->getRubrik();
  417.         }
  418.         $notifications $notificationRepository->findBy(['user' => $this->getUser()->getId(), 'type' => 5]);
  419.         $erlaubteDokumenteIDs = [];
  420.         if ($dokumente != null) {
  421.             $alleFirmengruppen $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()]);
  422.             foreach ($dokumente as $dokument) {
  423.                 if ($this->getRechteTabellenzeileId($dokument->getDownloadRechte(), $dokument->getZugriffsrechte(), $alleFirmengruppen)) {
  424.                     $erlaubteDokumenteIDs[] = $dokument->getId();
  425.                     if ($notifications != null) {
  426.                         foreach ($notifications as $notification) {
  427.                             if ($notification->getText() == $dokument->getDateiname()) {
  428.                                 $entityManager->remove($notification);
  429.                                 $entityManager->flush();
  430.                             }
  431.                         }
  432.                     }
  433.                 }
  434.             }
  435.         }
  436.         $erlaubteDokumente null;
  437.         if (count($erlaubteDokumenteIDs) > 0) {
  438.             $erlaubteDokumente $firmenDokumenteRepository->findBy(['id' => $erlaubteDokumenteIDs], ['upload_datum' => 'DESC']);
  439.         }
  440.         return $this->render('user/firma/dokumente.html.twig', [
  441.             'dokumente' => $erlaubteDokumente,
  442.             'lable' => $lable,
  443.             'rubrik' => $rubrikName,
  444.             'rubrikId' => $rubrik,
  445.         ]);
  446.     }
  447.     #[Route('/user/firma/news'name'user_firma_news')]
  448.     public function user_firma_news(UserRepository             $userRepository,
  449.                                     FirmenNewsRepository       $firmenNewsRepository,
  450.                                     FirmenGruppenRepository    $firmenGruppenRepository,
  451.                                     UserNotificationRepository $notificationRepository): Response
  452.     {
  453.         $news $firmenNewsRepository->findBy(['event' => 0'firma' => $this->getUser()->getFirmenProfil()->getId()], ['datum' => 'DESC']);
  454.         $alleFirmengruppen $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()]);
  455.         $erlaubteNewsIDs = [];
  456.         if ($news != null) {
  457.             foreach ($news as $new) {
  458.                 if ($this->getRechteTabellenzeileId($new->getSichtbar(), $new->getZugriffsrechte(), $alleFirmengruppen)) {
  459.                     $erlaubteNewsIDs[] = $new->getId();
  460.                 }
  461.             }
  462.         }
  463.         $erlaubteNews = [];
  464.         if (count($erlaubteNewsIDs) > 0) {
  465.             $erlaubteNews $firmenNewsRepository->findBy(['id' => $erlaubteNewsIDs], ['datum' => 'DESC']);
  466.         }
  467.         $notifications $notificationRepository->findBy(['user' => $this->getUser()->getId(), 'type' => 6]);
  468.         return $this->render('user/firma/news.html.twig', [
  469.             'firmenmitglieder' => $userRepository->findBy(['firmen_profil' => $this->getUser()->getFirmenProfil()->getId()]),
  470.             'lable' => $this->getLableInternerBereich(),
  471.             'alleNews' => $erlaubteNews,
  472.             'notifications' => $notifications,
  473.         ]);
  474.     }
  475.     #[Route('/user/firma/events'name'user_firma_events')]
  476.     public function user_firma_events(UserRepository             $userRepository,
  477.                                       FirmenNewsRepository       $firmenNewsRepository,
  478.                                       FirmenGruppenRepository    $firmenGruppenRepository,
  479.                                       UserNotificationRepository $notificationRepository): Response
  480.     {
  481.         $events $firmenNewsRepository->findBy(['event' => [12], 'firma' => $this->getUser()->getFirmenProfil()->getId()], ['datum' => 'DESC']);
  482.         $alleFirmengruppen $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()]);
  483.         $erlaubteEventIDs = [];
  484.         if ($events != null) {
  485.             foreach ($events as $event) {
  486.                 if ($this->getRechteTabellenzeileId($event->getSichtbar(), $event->getZugriffsrechte(), $alleFirmengruppen)) {
  487.                     $erlaubteEventIDs[] = $event->getId();
  488.                 }
  489.             }
  490.         }
  491.         $erlaubteEvents = [];
  492.         if (count($erlaubteEventIDs) > 0) {
  493.             $erlaubteEvents $firmenNewsRepository->findBy(['id' => $erlaubteEventIDs], ['datum' => 'DESC']);
  494.         }
  495.         $notifications $notificationRepository->findBy(['user' => $this->getUser()->getId(), 'type' => 7]);
  496.         return $this->render('user/firma/events.html.twig', [
  497.             'firmenmitglieder' => $userRepository->findBy(['firmen_profil' => $this->getUser()->getFirmenProfil()->getId()]),
  498.             'lable' => $this->getLableInternerBereich(),
  499.             'alleEvents' => $erlaubteEvents,
  500.             'notifications' => $notifications,
  501.         ]);
  502.     }
  503.     #[Route('/user/firma/news/ansehen/{id}/{admin}'name'user_firma_news_ansehen')]
  504.     public function user_firma_news_ansehen($id$adminUserRepository $userRepository,
  505.                                             FirmenNewsRepository $firmenNewsRepository,
  506.                                             UserNotificationRepository $notificationRepository,
  507.                                             FirmenGruppenRepository $firmenGruppenRepository,
  508.                                             EmailWarteschlangeRepository $emailWarteschlangeRepository,
  509.                                             FirebaseNotificationWarteschlangeRepository $firebaseNotificationWarteschlangeRepository,
  510.                                             EntityManagerInterface $entityManager): Response
  511.     {
  512.         $zugriffErlaubt false;
  513.         $news $firmenNewsRepository->findOneBy(['id' => $id'firma' => $this->getUser()->getFirmenProfil()->getId()]);
  514.         if ($news == null) {
  515.             return $this->redirectToRoute('user_start');
  516.         }
  517.         $alleFirmengruppen $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()]);
  518.         if (in_array("ROLE_FIRMA_ADMIN_NEWS_EVENTS"$this->getUser()->getRoles())) {
  519.             $zugriffErlaubt true;
  520.         } else {
  521.             if ($this->getRechteTabellenzeileId($news->getSichtbar(), $news->getZugriffsrechte(), $alleFirmengruppen)) {
  522.                 $zugriffErlaubt true;
  523.             }
  524.         }
  525.         if (!$zugriffErlaubt) {
  526.             return $this->redirectToRoute('user_start');
  527.         }
  528.         $notifications $notificationRepository->findOneBy(['user' => $this->getUser()->getId(), 'type' => 6'link' => $id]);
  529.         if ($notifications != null) {
  530.             $entityManager->remove($notifications);
  531.             $entityManager->flush();
  532.         }
  533.         $notifications $notificationRepository->findOneBy(['user' => $this->getUser()->getId(), 'type' => 7'link' => $id]);
  534.         if ($notifications != null) {
  535.             $entityManager->remove($notifications);
  536.             $entityManager->flush();
  537.         }
  538.         $newsGelsen json_decode($news->getGelesen(), true);
  539.         $newsGelsen[] = $this->getUser()->getId();
  540.         $newsGelsen json_encode(array_unique($newsGelsen));
  541.         $news->setGelesen($newsGelsen);
  542.         $entityManager->persist($news);
  543.         $entityManager->flush();
  544.         if ($news->getUuid() != null) {
  545.             $emails $emailWarteschlangeRepository->findBy(['user' => $this->getUser(), 'uuid' => $news->getUuid()]);
  546.             $notifications $firebaseNotificationWarteschlangeRepository->findBy(['user' => $this->getUser(), 'uuid' => $news->getUuid()]);
  547.             foreach ($emails as $email) {
  548.                     $entityManager->remove($email);
  549.             }
  550.             foreach ($notifications as $notification) {
  551.                 $entityManager->remove($notification);
  552.             }
  553.             $entityManager->flush();
  554.         }
  555.         $newsText $news->getText();
  556.         $sliders $news->getSliders();
  557.         if ($sliders != null) {
  558.             $sliders json_decode($sliderstrue);
  559.             if (count($sliders) > 0) {
  560.                 preg_match_all('{slider-[\d+]}'$newsText$matchesPREG_SET_ORDER);
  561.                 foreach ($matches as $match) {
  562.                     $sliderID explode('-'$match[0])[1];
  563.                     $currentSlider null;
  564.                     foreach ($sliders as $slider) {
  565.                         if ($slider['id'] === (int)$sliderID) {
  566.                             $currentSlider $slider;
  567.                             break;
  568.                         }
  569.                     }
  570.                     $sliderHTML '<div id="carousel-' $sliderID '" class="carousel slide">
  571.                                      <div class="carousel-inner">';
  572.                     $bildCount 0;
  573.                     foreach ($currentSlider['bilder'] as $bild) {
  574.                         $active $bildCount == 'active' '';
  575.                         $sliderHTML .= '<div class="carousel-item ' $active '">
  576.                                           <img src="' $this->generateUrl('admin_firma_datei_ansehen', ['id' => $bild]) . '?bild=" class="d-block w-100">
  577.                                         </div>';
  578.                         $bildCount++;
  579.                     }
  580.                     $sliderHTML .= '</div>
  581.                                         <button class="carousel-control-prev" type="button" data-bs-target="#carousel-' $sliderID '" data-bs-slide="prev">
  582.                                             <span class="carousel-control-prev-icon" aria-hidden="true"></span>
  583.                                             <span class="visually-hidden">Previous</span>
  584.                                         </button>
  585.                                         <button class="carousel-control-next" type="button" data-bs-target="#carousel-' $sliderID '" data-bs-slide="next">
  586.                                             <span class="carousel-control-next-icon" aria-hidden="true"></span>
  587.                                             <span class="visually-hidden">Next</span>
  588.                                         </button>
  589.                                     </div>
  590.                                     <script>
  591.                                         jQuery(function($){
  592.                                             const carousel = new bootstrap.Carousel(document.querySelector("#carousel-' $sliderID '"), {
  593.                                               ride: false,
  594.                                               touch: true
  595.                                             })
  596.                                         });
  597.                                     </script>';
  598.                     $newsText str_replace('{' $match[0] . '}'$sliderHTML$newsText);
  599.                 }
  600.             }
  601.         }
  602.         return $this->render('user/firma/news_ansehen.html.twig', [
  603.             'firmenmitglieder' => $userRepository->findBy(['firmen_profil' => $this->getUser()->getFirmenProfil()->getId()]),
  604.             'lable' => $this->getLableInternerBereich(),
  605.             'news' => $news,
  606.             'newsText' => $newsText,
  607.             'admin' => $admin,
  608.         ]);
  609.     }
  610.     #[Route('/user/firma/news/zusagen/{id}'name'user_firma_news_zusagen')]
  611.     public function user_firma_news_zusagen(Request                $request$id,
  612.                                             FirmenNewsRepository   $firmenNewsRepository,
  613.                                             EntityManagerInterface $entityManager): Response
  614.     {
  615.         $returnData['error'] = false;
  616.         $userId $this->getUser()->getId();
  617.         $zusage = (int)$request->get('entscheidung');
  618.         $news $firmenNewsRepository->findOneBy(['id' => $id'event' => 2'firma' => $this->getUser()->getFirmenProfil()->getId()]);
  619.         $newsZusagen $news->getZusagen() == null ? [] : json_decode($news->getZusagen(), true);
  620.         $newsAbsagen $news->getAbsagen() == null ? [] : json_decode($news->getAbsagen(), true);
  621.         if ($news->getMaxTeilnehmer() > 0) {
  622.             if ($news->getMaxTeilnehmer() - count($newsZusagen) <= 0) {
  623.                 $returnData['error'] = true;
  624.                 return new JsonResponse($returnData);
  625.             }
  626.         }
  627.         $datum = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
  628.         $datumKontrolle $datum->format("Y-m-d H:i:s");
  629.         $abgabeDatum $news->getAbgabeDatum()->format("Y-m-d H:i:s");
  630.         if ($abgabeDatum >= $datumKontrolle) {
  631.             if ($zusage == 1) {
  632.                 $newsZusagen[] = $userId;
  633.                 $newsZusagen array_unique($newsZusagen);
  634.                 if ($newsAbsagen != null) {
  635.                     $newsAbsagen array_diff($newsAbsagen, [$userId]);
  636.                 }
  637.             } else {
  638.                 $newsAbsagen[] = $userId;
  639.                 $newsAbsagen array_unique($newsAbsagen);
  640.                 if ($newsZusagen != null) {
  641.                     $newsZusagen array_diff($newsZusagen, [$userId]);
  642.                 }
  643.             }
  644.             $newsZusagen count($newsZusagen) == null json_encode($newsZusagen);
  645.             $newsAbsagen count($newsAbsagen) == null json_encode($newsAbsagen);
  646.             $news->setZusagen($newsZusagen);
  647.             $news->setAbsagen($newsAbsagen);
  648.             $entityManager->persist($news);
  649.             $entityManager->flush();
  650.             $grundAngabe $request->get('grund');
  651.             foreach ($news->getGruende() as $grund) {
  652.                 if ($grund->getUserId() == $userId) {
  653.                     $entityManager->remove($grund);
  654.                     $entityManager->flush();
  655.                 }
  656.             }
  657.             if ($grundAngabe != '-1') {
  658.                 $neuerGrund = new FirmenNewsEventEntscheidungGrund();
  659.                 $neuerGrund->setNews($news);
  660.                 $neuerGrund->setUserId($userId);
  661.                 $neuerGrund->setGrund($grundAngabe);
  662.                 $entityManager->persist($neuerGrund);
  663.                 $entityManager->flush();
  664.             }
  665.         }
  666.         return new JsonResponse($returnData);
  667.     }
  668.     #[Route('/user/firma/news/lesebestaetigung/{id}'name'user_firma_news_lesebestaetigung')]
  669.     public function user_firma_news_lesebestaetigung($id,
  670.                                             FirmenNewsRepository   $firmenNewsRepository,
  671.                                             EntityManagerInterface $entityManager): Response
  672.     {
  673.         $returnData['error'] = false;
  674.         $userId $this->getUser()->getId();
  675.         $news $firmenNewsRepository->findOneBy(['id' => $id'event' => 0'firma' => $this->getUser()->getFirmenProfil()->getId(), 'bestaetigung' => 1]);
  676.         if ($news != null) {
  677.             $bestaetigungen $news->getZusagen() == null ? [] : json_decode($news->getZusagen(), true);
  678.             $bestaetigungen[] = $userId;
  679.             $bestaetigungen array_unique($bestaetigungen);
  680.             $news->setZusagen(json_encode($bestaetigungen));
  681.             $entityManager->persist($news);
  682.             $entityManager->flush();
  683.         }
  684.         return new JsonResponse($returnData);
  685.     }
  686.     #[Route('/user/firma/firmenmitglieder'name'user_firma_mitglieder')]
  687.     public function user_firma_mitglieder(UserRepository $userRepository): Response
  688.     {
  689.         return $this->render('user/firma/firmenmitglieder.html.twig', [
  690.             'firmenmitglieder' => $userRepository->findBy(['firmen_profil' => $this->getUser()->getFirmenProfil()->getId()]),
  691.             'lable' => $this->getLableInternerBereich(),
  692.         ]);
  693.     }
  694.     #[Route('/user/firma/empfehlungen'name'user_firma_empfehlungen')]
  695.     public function user_firma_empfehlungen(UserEmpfehlungenRepository $userEmpfehlungenRepository,
  696.                                             UserNotificationRepository $notificationRepository,
  697.                                             SchulungenRepository       $schulungenRepository,
  698.                                             BuchungenRepository        $buchungenRepository,
  699.                                             EntityManagerInterface     $entityManager): Response
  700.     {
  701.         // Empfehlungen erhalten
  702.         $neueEmpfehlungenIDs = [];
  703.         $schulungsIDs = [];
  704.         $buchungenIDs = [];
  705.         $notifications $notificationRepository->findBy(['user' => $this->getUser()->getId(), 'type' => 8]);
  706.         if ($notifications != null) {
  707.             foreach ($notifications as $notification) {
  708.                 $neueEmpfehlungenIDs[] = (int)$notification->getLink();
  709.                 $entityManager->remove($notification);
  710.                 $entityManager->flush();
  711.             }
  712.         }
  713.         $empfehlungen $userEmpfehlungenRepository->findBy(['user' => $this->getUser()], ['datum' => 'DESC']);
  714.         foreach ($empfehlungen as $empfehlung) {
  715.             $schulungsIDs[] = (int)$empfehlung->getSchulungId();
  716.             if ($empfehlung->getBuchungenId() != null) {
  717.                 $buchungenIDs[] = $empfehlung->getBuchungenId();
  718.             }
  719.         }
  720.         $schulungen $schulungenRepository->findBy(['id' => $schulungsIDs]);
  721.         $buchungen $buchungenRepository->findBy(['id' => $buchungenIDs]);
  722.         $weiterempfehlungSchulungsIDs = [];
  723.         $weiterempfehlungen $userEmpfehlungenRepository->findBy(['von_user_id' => $this->getUser()]);
  724.         foreach ($weiterempfehlungen as $empfehlung) {
  725.             $weiterempfehlungSchulungsIDs[] = (int)$empfehlung->getSchulungId();
  726.         }
  727.         $weiterempfehlungenSchulungen $schulungenRepository->findBy(['id' => $weiterempfehlungSchulungsIDs]);
  728.         return $this->render('user/firma/empfehlungen.html.twig', [
  729.             'empfehlungen' => $empfehlungen,
  730.             'neueEmpfehlungenIDs' => $neueEmpfehlungenIDs,
  731.             'schulungen' => $schulungen,
  732.             'buchungen' => $buchungen,
  733.             'weiterempfehlungen' => $weiterempfehlungen,
  734.             'weiterempfehlungenSchulungen' => $weiterempfehlungenSchulungen,
  735.         ]);
  736.     }
  737.     #[Route('/user/firma/firmenlinks'name'user_firma_firmenlinks')]
  738.     public function user_firma_firmenlinks(FirmenprofilRepository $firmenprofilRepository): Response
  739.     {
  740.         $firmenlinks = [];
  741.         $firma $firmenprofilRepository->findOneBy(['id' => $this->getUser()->getFirmenprofil()]);
  742.         if ($firma?->getMitarbeiterInternMenuFreigabe() != null) {
  743.             $menuFreigabe json_decode($firma->getMitarbeiterInternMenuFreigabe(), true);
  744.             if (isset($menuFreigabe['firmenLinks'])) {
  745.                 $firmenlinks $menuFreigabe['firmenLinks'];
  746.             }
  747.         }
  748.         return $this->render('user/firma/firmenlinks.html.twig', [
  749.             'firmenlinks' => $firmenlinks,
  750.         ]);
  751.     }
  752.     #[Route('/user/firma/empfehlungen_erneuern/{id}'name'user_firma_empfehlungen_erneuern')]
  753.     public function user_firma_empfehlungen_erneuern($idUserEmpfehlungenRepository $userEmpfehlungenRepository,
  754.                                                      EntityManagerInterface $entityManager): Response
  755.     {
  756.         $returnData['error'] = true;
  757.         $returnData['id'] = $id;
  758.         $empfehlung $userEmpfehlungenRepository->findOneBy(['id' => $id'firma' => $this->getUser()->getFirmenprofil()]);
  759.         if ($empfehlung->getVonUserId() == $this->getUser()->getId() || in_array("ROLE_FIRMA_BUCHUNGEN"$this->getUser()->getRoles())) {
  760.             if ($empfehlung != null) {
  761.                 $datumClone = clone $empfehlung->getDatum();
  762.                 $datumBisEnde $datumClone->modify('+' $empfehlung->getTageAktiv() . ' day');
  763.                 $differenz $datumBisEnde->diff(new \DateTime('now', new \DateTimeZone('Europe/Berlin')));
  764.                 $dazu 30 $differenz->days;
  765.                 $empfehlung->setTageAktiv($empfehlung->getTageAktiv() + $dazu);
  766.                 $entityManager->persist($empfehlung);
  767.                 $entityManager->flush();
  768.                 $returnData['error'] = false;
  769.             }
  770.         }
  771.         return new JsonResponse($returnData);
  772.     }
  773.     #[Route('/user/firma/empfehlungen_loeschen/{id}'name'user_firma_empfehlungen_loeschen')]
  774.     public function user_firma_empfehlungen_loeschen($idUserEmpfehlungenRepository $userEmpfehlungenRepository,
  775.                                                      UserNotificationRepository $notificationRepository,
  776.                                                      EntityManagerInterface $entityManager): Response
  777.     {
  778.         $returnData['error'] = true;
  779.         $returnData['id'] = $id;
  780.         $empfehlung $userEmpfehlungenRepository->findOneBy(['id' => $id'firma' => $this->getUser()->getFirmenprofil()]);
  781.         if ($empfehlung->getVonUserId() == $this->getUser()->getId() || in_array("ROLE_FIRMA_BUCHUNGEN"$this->getUser()->getRoles())) {
  782.             if ($empfehlung != null) {
  783.                 $notifications $notificationRepository->findBy(['user' => $empfehlung->getUser(), 'link' => $empfehlung->getId(), 'type' => 8]);
  784.                 if ($notifications != null) {
  785.                     foreach ($notifications as $notification) {
  786.                         $entityManager->remove($notification);
  787.                         $entityManager->flush();
  788.                     }
  789.                 }
  790.                 $entityManager->remove($empfehlung);
  791.                 $entityManager->flush();
  792.                 $returnData['error'] = false;
  793.             }
  794.         }
  795.         return new JsonResponse($returnData);
  796.     }
  797.     #[Route('/user/firma/datei/ansehen/{id}'name'admin_firma_datei_ansehen')]
  798.     public function admin_firma_datei_ansehen($idFirmenprofilRepository $firmenprofilRepository,
  799.                                               FirmenDateienRepository $firmenDateienRepository): Response
  800.     {
  801.         $firmenprofilId $this->getUser()?->getFirmenProfil()?->getId();
  802.         $datei null;
  803.         if ($firmenprofilId != null) {
  804.             $firmenprofil $firmenprofilRepository->findOneBy(['id' => $firmenprofilId]);
  805.             $datei $firmenDateienRepository->findOneBy(['id' => $id'firma' => $firmenprofil]);
  806.         }
  807.         if ($datei == null) {
  808.             return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten"403);
  809.         }
  810.         $serverFilePath $this->getParameter('admin_ordner') . '/dateimanager/' $firmenprofilId '/' $datei->getSpeichername();
  811.         $filenextension explode('.'$datei->getSpeichername())[1];
  812.         $speichername $datei->getDateiname() . '.' $filenextension;
  813.         $response = new BinaryFileResponse($serverFilePath);
  814.         $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT$speichername);
  815.         return $response;
  816.     }
  817.     #[Route('/user/firma/interne_schulungen_datei/ansehen/{id}/{inhaltId}'name'admin_firma_interne_schulungen_datei_ansehen')]
  818.     public function admin_firma_interne_schulungen_datei_ansehen($id$inhaltIdFirmenprofilRepository $firmenprofilRepository,
  819.                                                                  FirmenInterneSchulungenInhaltRepository $inhaltRepository,
  820.                                                                  FirmenDateienRepository $firmenDateienRepository): Response
  821.     {
  822.         $interneSchulungInhalt $inhaltRepository->findOneBy(['id' => $inhaltId]);
  823.         $firma $this->getUser()->getFirmenProfil();
  824.         if ($interneSchulungInhalt->getInterneSchulung()->getOriginalSchulungsId() != null) {
  825.             $firma $firmenprofilRepository->findOneBy(['id' => 1]);
  826.         }
  827.         $datei $firmenDateienRepository->findOneBy(['id' => $id'firma' => $firma]);
  828.         $inhalt $inhaltRepository->findOneBy(['id' => $inhaltId'datei' => $datei]);
  829.         if ($inhalt == null) {
  830.             $dateiGefunden false;
  831.             foreach ($interneSchulungInhalt->getSprachen() as $sprachen) {
  832.                 if ($sprachen->getDatei()->getId() == $datei->getId()) {
  833.                     $dateiGefunden true;
  834.                 }
  835.             }
  836.             if (!$dateiGefunden) {
  837.                 return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten"403);
  838.             }
  839.         }
  840.         $serverFilePath $this->getParameter('admin_ordner') . '/dateimanager/' $firma->getId() . '/' $datei->getSpeichername();
  841.         $filenextension explode('.'$datei->getSpeichername())[1];
  842.         $speichername $datei->getDateiname() . '.' $filenextension;
  843.         $response = new BinaryFileResponse($serverFilePath);
  844.         $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT$speichername);
  845.         return $response;
  846.     }
  847.     #[Route('/user/firma/interne_schulung_sprachen_datei/ansehen/{id}/{inhaltId}'name'admin_firma_interne_schulung_sprachen_datei_ansehen')]
  848.     public function admin_firma_interne_schulung_sprachen_datei_ansehen($id$inhaltIdFirmenprofilRepository $firmenprofilRepository,
  849.                                                                         FirmenInterneSchulungInhaltSprachenRepository $inhaltSprachenRepository,
  850.                                                                         FirmenDateienRepository $firmenDateienRepository): Response
  851.     {
  852.         $firma $firmenprofilRepository->findOneBy(['id' => 1]);
  853.         $datei $firmenDateienRepository->findOneBy(['id' => $id'firma' => $firma]);
  854.         $inhalt $inhaltSprachenRepository->findOneBy(['id' => $inhaltId'datei' => $datei]);
  855.         if ($inhalt == null) {
  856.             return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten"403);
  857.         }
  858.         $serverFilePath $this->getParameter('admin_ordner') . '/dateimanager/' $firma->getId() . '/' $datei->getSpeichername();
  859.         $filenextension explode('.'$datei->getSpeichername())[1];
  860.         $speichername $datei->getDateiname() . '.' $filenextension;
  861.         $response = new BinaryFileResponse($serverFilePath);
  862.         $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT$speichername);
  863.         return $response;
  864.     }
  865.     #[Route('/user/firma/datei/download/{seite}/{seiteId}/{dateiId}'name'user_firma_datei_download')]
  866.     public function admin_firma_datei_download($seite$seiteId$dateiId,
  867.                                                FirmenNewsRepository $firmenNewsRepository,
  868.                                                FirmenNewsAnhangRepository $firmenNewsAnhangRepository,
  869.                                                FirmenGruppenRepository $firmenGruppenRepository,
  870.                                                FirmenInterneSchulungenInhaltRepository $firmenInterneSchulungenInhaltRepository,
  871.                                                FirmenprofilRepository $firmenprofilRepository,
  872.                                                FirmenDateienRepository $firmenDateienRepository): Response
  873.     {
  874.         $firmenprofilId $this->getUser()->getFirmenProfil()->getId();
  875.         $datei $firmenDateienRepository->findOneBy(['id' => $dateiId'firma' => $this->getUser()?->getFirmenProfil()]);
  876.         $alleFirmengruppen $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()]);
  877.         if ($seite == 'interneSchulung') {
  878.             $interneSchulungInhalt $firmenInterneSchulungenInhaltRepository->findOneBy(['id' => $seiteId]);
  879.             $firma $this->getUser()->getFirmenProfil();
  880.             if ($interneSchulungInhalt->getInterneSchulung()->getOriginalSchulungsId() != null) {
  881.                 $firma $firmenprofilRepository->findOneBy(['id' => 1]);
  882.                 $firmenprofilId $firma->getId();
  883.             }
  884.             $datei $firmenDateienRepository->findOneBy(['id' => $dateiId'firma' => $firma]);
  885.         }
  886.         if ($datei == null) {
  887.             return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte starte die Seite handwerkXcampus.de neu"403);
  888.         }
  889.         $zugriffErlaubt false;
  890.         if (in_array("ROLE_FIRMA_ADMIN_NEWS_EVENTS"$this->getUser()->getRoles()) && $seite != 'interneSchulung') {
  891.             $zugriffErlaubt true;
  892.         } else {
  893.             if ($seite == 'news') {
  894.                 $news $firmenNewsRepository->findOneBy(['id' => $seiteId'firma' => $this->getUser()->getFirmenProfil()]);
  895.                 $newsAnhang $firmenNewsAnhangRepository->findOneBy(['news' => $news'datei' => $datei]);
  896.                 if ($this->getRechteTabellenzeileId($news->getSichtbar(), $news->getZugriffsrechte(), $alleFirmengruppen)) {
  897.                     $zugriffErlaubt true;
  898.                 }
  899.             }
  900.             if ($seite == 'interneSchulung') {
  901.                 $interneSchulungInhalt $firmenInterneSchulungenInhaltRepository->findOneBy(['id' => $seiteId'datei' => $datei]);
  902.                 if ($interneSchulungInhalt != null && $interneSchulungInhalt->getInterneSchulung()->getSichtbar() == && $interneSchulungInhalt->getInterneSchulung()->getFirma() == $this->getUser()->getFirmenProfil()) {
  903.                     $zugriffErlaubt true;
  904.                 }
  905.             }
  906.         }
  907.         if ($zugriffErlaubt == false) {
  908.             return new JsonResponse("Keine Berechtigung. Bitte starte die Seite handwerkXcampus.de neu"403);
  909.         }
  910.         $serverFilePath $this->getParameter('admin_ordner') . '/dateimanager/' $firmenprofilId '/' $datei->getSpeichername();
  911.         $filenextension explode('.'$datei->getSpeichername())[1];
  912.         $speichername $datei->getDateiname() . '.' $filenextension;
  913.         $response = new BinaryFileResponse($serverFilePath);
  914.         $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT$speichername);
  915.         return $response;
  916.     }
  917.     // Bild einbinden aus dem var Ordner mit Berechtigungsabfrage
  918.     #[Route('/user/firma/dokumente/ansehen/{id}'name'user_firma_dokument_ansehen')]
  919.     public function user_firma_dokument_ansehen($idFirmenDokumenteRepository $firmenDokumenteRepository,
  920.                                                 FirmenGruppenRepository $firmenGruppenRepository,
  921.                                                 EntityManagerInterface $entityManager): Response
  922.     {
  923.         $datei $firmenDokumenteRepository->findOneBy(['id' => $id'firma' => $this->getUser()?->getFirmenProfil()->getId()]);
  924.         $datum = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
  925.         $alleFirmengruppen $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()]);
  926.         if ($datei != null) {
  927.             $download false;
  928.             if ($this->getRechteTabellenzeileId($datei->getDownloadRechte(), $datei->getZugriffsrechte(), $alleFirmengruppen)) {
  929.                 $download true;
  930.             }
  931.             if (!$download) {
  932.                 return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten"403);
  933.             }
  934.             $bestaetigungen = [];
  935.             $tmpBestaetigungen $datei->getBestaetigungen();
  936.             if (strlen($tmpBestaetigungen)) {
  937.                 $bestaetigungen json_decode($tmpBestaetigungentrue);
  938.             }
  939.             $downloadEintragen true;
  940.             if (isset($bestaetigungen['download'])) {
  941.                 for ($i 0$i count($bestaetigungen['download']); $i++) {
  942.                     if ((int)$bestaetigungen['download'][$i]['userId'] == $this->getUser()->getId()) {
  943.                         $downloadEintragen false;
  944.                     }
  945.                 }
  946.             }
  947.             if ($downloadEintragen) {
  948.                 $downloadArr = [];
  949.                 $downloadArr['userId'] = $this->getUser()->getId();
  950.                 $downloadArr['datum'] = $datum->format("d.m.Y H:i");
  951.                 $downloadArr['bestaetigung'] = "";
  952.                 $bestaetigungen["download"][] = $downloadArr;
  953.                 $datei->setBestaetigungen(json_encode($bestaetigungentrue));
  954.                 $entityManager->persist($datei);
  955.                 $entityManager->flush();
  956.             }
  957.         } else {
  958.             return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten"403);
  959.         }
  960.         $serverFilePath $this->getParameter('admin_ordner') . '/dateimanager/' $this->getUser()->getFirmenProfil()->getId() . '/' $datei->getSpeichername();
  961.         $filenextension explode('.'$datei->getSpeichername())[1];
  962.         $speichername $datei->getDateiname() . '.' $filenextension;
  963.         $response = new BinaryFileResponse($serverFilePath);
  964.         $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT$speichername);
  965.         return $response;
  966.     }
  967.     #[Route('/user/firma/dokumente/bestaetigen/{id}'name'user_firma_dokument_bestaetigen')]
  968.     public function user_firma_dokument_bestaetigen($idFirmenDokumenteRepository $firmenDokumenteRepository,
  969.                                                     FirmenGruppenRepository $firmenGruppenRepository,
  970.                                                     EntityManagerInterface $entityManager): Response
  971.     {
  972.         $jsonDataRechte null;
  973.         $datei $firmenDokumenteRepository->findOneBy(['id' => $id'firma' => $this->getUser()?->getFirmenProfil()->getId()]);
  974.         $datum = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
  975.         $alleFirmengruppen $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()]);
  976.         if ($datei != null) {
  977.             $download false;
  978.             if ($this->getRechteTabellenzeileId($datei->getDownloadRechte(), $datei->getZugriffsrechte(), $alleFirmengruppen)) {
  979.                 $download true;
  980.             }
  981.             if (!$download) {
  982.                 return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten"403);
  983.             }
  984.             $bestaetigungen = [];
  985.             $tmpBestaetigungen $datei->getBestaetigungen();
  986.             if (strlen($tmpBestaetigungen)) {
  987.                 $bestaetigungen json_decode($tmpBestaetigungentrue);
  988.             }
  989.             if (isset($bestaetigungen['download'])) {
  990.                 for ($i 0$i count($bestaetigungen['download']); $i++) {
  991.                     if ((int)$bestaetigungen['download'][$i]['userId'] == $this->getUser()->getId()) {
  992.                         if ((int)$bestaetigungen['download'][$i]['userId'] == $this->getUser()->getId()) {
  993.                             if (strlen($bestaetigungen['download'][$i]['bestaetigung']) === 0) {
  994.                                 $bestaetigungen['download'][$i]['bestaetigung'] = $datum->format("d.m.Y H:i");
  995.                                 $datei->setBestaetigungen(json_encode($bestaetigungentrue));
  996.                                 $entityManager->persist($datei);
  997.                                 $entityManager->flush();
  998.                             }
  999.                         }
  1000.                     }
  1001.                 }
  1002.             }
  1003.         } else {
  1004.             return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten"403);
  1005.         }
  1006.         $returnData['error'] = false;
  1007.         return new JsonResponse($returnData);
  1008.     }
  1009.     // Bild einbinden aus dem var Ordner mit Berechtigungsabfrage
  1010.     #[Route('/user/firma/private_upload_datei/ansehen/{id}'name'user_firma_private_upload_datei_ansehen')]
  1011.     public function dateienAnsehen($idFirmenprofilRepository $firmenprofilRepository,
  1012.                                    FirmenDateimanagerRepository $firmenDateimanagerRepository,
  1013.                                    FirmenDateimanagerDownloadRepository $firmenDateimanagerDownloadRepository,
  1014.                                    UserNotificationRepository $notificationRepository,
  1015.                                    EntityManagerInterface $entityManager): Response
  1016.     {
  1017.         $jsonDataRechte = [];
  1018.         $meineUserID $this->getUser()->getId();
  1019.         $firmenprofilId $this->getUser()->getFirmenProfil()->getId();
  1020.         $firmenprofil $firmenprofilRepository->findOneBy(['id' => $firmenprofilId]);
  1021.         $datei $firmenDateimanagerRepository->findOneBy(['id' => $id'firma' => $firmenprofil]);
  1022.         if ($datei->getUserId() != $meineUserID) {
  1023.             $downloadRechte $datei->getDownloadRechte();
  1024.             if (strlen($downloadRechte)) {
  1025.                 $jsonDataRechte json_decode($downloadRechtetrue);
  1026.             }
  1027.             $download false;
  1028.             if (isset($jsonDataRechte['rechte'])) {
  1029.                 foreach ($jsonDataRechte['rechte'] as $data) {
  1030.                     if ((int)$data['userId'] == $meineUserID) {
  1031.                         $download true;
  1032.                     }
  1033.                 }
  1034.             }
  1035.             if (!$download) {
  1036.                 return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten"403);
  1037.             }
  1038.             $downloads $firmenDateimanagerDownloadRepository->findBy(['datei' => $datei'user_id' => $meineUserID]);
  1039.             foreach ($downloads as $meinDownload) {
  1040.                 $entityManager->remove($meinDownload);
  1041.                 $entityManager->flush();
  1042.             }
  1043.             $neuerDownload = new FirmenDateimanagerDownload();
  1044.             $neuerDownload->setDatei($datei);
  1045.             $neuerDownload->setUserId($meineUserID);
  1046.             $neuerDownload->setDownloadDatum(new \DateTime('now', new \DateTimeZone('Europe/Berlin')));
  1047.             $entityManager->persist($neuerDownload);
  1048.             $entityManager->flush();
  1049.             $notificationGelesen $notificationRepository->findOneBy(['user' => $this->getUser()->getId(), 'von_user_id' => $datei->getUserId(), 'type' => 1'text' => $datei->getDateiname()]);
  1050.             if ($notificationGelesen != null) {
  1051.                 $notificationGelesen->setGelesen(1);
  1052.                 $entityManager->persist($notificationGelesen);
  1053.                 $entityManager->flush();
  1054.             }
  1055.         }
  1056.         $serverFilePath $this->getParameter('admin_ordner') . '/dateimanager/' $firmenprofilId '/' $datei->getSpeichername();
  1057.         $filenextension explode('.'$datei->getSpeichername())[1];
  1058.         $speichername $datei->getDateiname() . '.' $filenextension;
  1059.         $response = new BinaryFileResponse($serverFilePath);
  1060.         $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT$speichername);
  1061.         return $response;
  1062.     }
  1063. }