<?php
namespace App\Controller\userController;
use App\Controller\basisController\UserBasisController;
use App\Entity\FirmenDateimanagerDownload;
use App\Entity\FirmenNewsEventEntscheidungGrund;
use App\Repository\BuchungenRepository;
use App\Repository\ChatRepository;
use App\Repository\EmailWarteschlangeRepository;
use App\Repository\FirebaseNotificationWarteschlangeRepository;
use App\Repository\FirmenDateienRepository;
use App\Repository\FirmenDateimanagerDownloadRepository;
use App\Repository\FirmenDateimanagerRepository;
use App\Repository\FirmenDokumenteRepository;
use App\Repository\FirmenDokumenteRubrikenRepository;
use App\Repository\FirmenGruppenRepository;
use App\Repository\FirmenInterneSchulungenInhaltRepository;
use App\Repository\FirmenInterneSchulungenRepository;
use App\Repository\FirmenInterneSchulungInhaltSprachenRepository;
use App\Repository\FirmenNewsAnhangRepository;
use App\Repository\FirmenNewsRepository;
use App\Repository\FirmenprofilRepository;
use App\Repository\FirmenUmfragenRepository;
use App\Repository\NotdienstRepository;
use App\Repository\SchulungenRepository;
use App\Repository\UserEmpfehlungenRepository;
use App\Repository\UserNotificationRepository;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Routing\Annotation\Route;
class FirmaController extends UserBasisController
{
#[Route('/user/firma/startseite/{id}/{seite}', name: 'user_firma')]
public function index($id, $seite,
NotdienstRepository $notdienstRepository,
ChatRepository $chatRepository,
UserNotificationRepository $notificationRepository,
UserEmpfehlungenRepository $userEmpfehlungenRepository,
FirmenInterneSchulungenRepository $firmenInterneSchulungenRepository,
FirmenDateimanagerRepository $firmenDateimanagerRepository,
FirmenDokumenteRubrikenRepository $dokumenteRubrikenRepository,
FirmenNewsRepository $firmenNewsRepository,
FirmenUmfragenRepository $firmenUmfragenRepository,
FirmenGruppenRepository $firmenGruppenRepository,
FirmenDokumenteRepository $firmenDokumenteRepository,
EntityManagerInterface $entityManager): Response
{
$firmenmitglieder = $this->getUserBC_FirmenmitgliederGeordnet();
$notifications = $notificationRepository->findBy(['user' => $this->getUser()->getId()]);
$dateien = $firmenDateimanagerRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()], ['upload_datum' => 'DESC']);
$dokumente = $firmenDokumenteRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()], ['upload_datum' => 'DESC']);
$rubriken = $dokumenteRubrikenRepository->findBy(['firma' => [null, $this->getUser()->getFirmenProfil()->getId()]], ['rubrik' => 'ASC']);
$alleFirmengruppen = $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()], ['name' => 'ASC']);
$alleSchulungen = $firmenInterneSchulungenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil(), 'sichtbar' => 1, 'status' => [0, 1, 2, 3]]);
$chatNachrichten = $chatRepository->findBy(['user_id' => $firmenmitglieder]);
$empfehlungen1 = $userEmpfehlungenRepository->findBy(['user' => $this->getUser(), 'firma' => $this->getUser()->getFirmenProfil()->getId()]);
$empfehlungen2 = $userEmpfehlungenRepository->findBy(['von_user_id' => $this->getUser()->getId(), 'firma' => $this->getUser()->getFirmenProfil()->getId()]);
$empfehlungen = array_merge($empfehlungen1, $empfehlungen2);
$news = $firmenNewsRepository->findBy(['event' => 0, 'aktiv' => 1, 'firma' => $this->getUser()->getFirmenProfil()->getId()], ['datum' => 'DESC']);
$erlaubteNewsIDs = [];
if ($news != null) {
foreach ($news as $new) {
if ($this->getRechteTabellenzeileId($new->getSichtbar(), $new->getZugriffsrechte(), $alleFirmengruppen)) {
$erlaubteNewsIDs[] = $new->getId();
}
}
}
$erlaubteNews = [];
if (count($erlaubteNewsIDs) > 0) {
$erlaubteNews = $firmenNewsRepository->findBy(['id' => $erlaubteNewsIDs], ['datum' => 'DESC']);
}
$events = $firmenNewsRepository->findBy(['event' => [1, 2], 'aktiv' => 1, 'firma' => $this->getUser()->getFirmenProfil()->getId()], ['datum' => 'DESC']);
$erlaubteEventIDs = [];
if ($events != null) {
foreach ($events as $event) {
if ($this->getRechteTabellenzeileId($event->getSichtbar(), $event->getZugriffsrechte(), $alleFirmengruppen)) {
$erlaubteEventIDs[] = $event->getId();
}
}
}
$erlaubteEvents = [];
if (count($erlaubteEventIDs) > 0) {
$erlaubteEvents = $firmenNewsRepository->findBy(['id' => $erlaubteEventIDs], ['datum' => 'DESC']);
}
$umfragen = $firmenUmfragenRepository->findBy(['aktiv' => 1, 'firma' => $this->getUser()->getFirmenProfil()->getId()], ['datum' => 'DESC']);
$erlaubteUmfragenIDs = [];
if ($umfragen != null) {
foreach ($umfragen as $umfrage) {
if ($this->getRechteTabellenzeileId($umfrage->getRechte(), $umfrage->getZugriffsrechte(), $alleFirmengruppen)) {
$erlaubteUmfragenIDs[] = $umfrage->getId();
}
}
}
$erlaubteUmfragen = [];
if (count($erlaubteUmfragenIDs) > 0) {
$erlaubteUmfragen = $firmenUmfragenRepository->findBy(['id' => $erlaubteUmfragenIDs], ['datum' => 'DESC']);
}
$umfrageAbgeschlossenIDs = [];
foreach ($erlaubteUmfragen as $erlaubteUmfrage) {
$ids = $erlaubteUmfrage->getAbgeschlossen() == null ? [] : json_decode($erlaubteUmfrage->getAbgeschlossen(), true);
if (in_array($this->getUser()->getId(), $ids)) {
$umfrageAbgeschlossenIDs[] = $erlaubteUmfrage->getId();
}
}
$firmengruppenChats = [];
foreach ($alleFirmengruppen as $firmengruppe) {
if ($firmengruppe->getChatAktiv() == 1) {
$firmengruppeUser = json_decode($firmengruppe->getGruppenMitarbeiter(), true);
if (in_array($this->getUser()->getId(), $firmengruppeUser)) {
$anzahlUser = 0;
foreach ($firmenmitglieder as $firmenmitglied) {
if (in_array($firmenmitglied->getId(), $firmengruppeUser)) {
$anzahlUser = $anzahlUser + 1;
}
}
$arrayFirmengruppen = [];
$arrayFirmengruppen['id'] = $firmengruppe->getId();
$arrayFirmengruppen['name'] = $firmengruppe->getName();
$arrayFirmengruppen['anzahl'] = $anzahlUser;
$arrayFirmengruppen['projekt'] = $firmengruppe?->getProjekt()?->getId();
$firmengruppenChats[] = $arrayFirmengruppen;
}
}
}
$RechteDateienArr = [];
if ($dateien != null) {
foreach ($dateien as $datei) {
$rechte = json_decode($datei->getDownloadRechte(), true);
$rechteDaten = [];
$rechteDaten['dateiId'] = $datei->getId();
$rechteDaten['datei'] = $rechte;
$RechteDateienArr[] = $rechteDaten;
}
}
$DokumenteArr = [];
if ($dokumente != null) {
foreach ($dokumente as $dokument) {
$rechteSpeichern = false;
if ($this->getRechteTabellenzeileId($dokument->getDownloadRechte(), $dokument->getZugriffsrechte(), $alleFirmengruppen)) {
$rechteSpeichern = true;
}
if ($rechteSpeichern) {
$rechteDaten = [];
$rechteDaten['rubrikId'] = $dokument->getRubrik()->getId();
$rechteDaten['dokumentId'] = $dokument->getId();
$rechteDaten['dokumentName'] = $dokument->getDateiname();
$rechteDaten['bestaetigungAnfordern'] = $dokument->getBestaetigungAnfordern();
$rechteDaten['bestaetigungen'] = $dokument->getBestaetigungen();
$rechteDaten['rechte'] = $dokument->getDownloadRechte();
$DokumenteArr[] = $rechteDaten;
}
}
}
$schulungen = [];
foreach ($alleSchulungen as $alleSchulung) {
if ($this->getRechteTabellenzeileId($alleSchulung->getRechte(), $alleSchulung->getZugriffsrechte(), $alleFirmengruppen)) {
$schulungen[] = $alleSchulung;
}
}
$notdienste = $notdienstRepository->findKommendeNotdiensteUser($this->getUser()->getFirmenProfil()->getId(), $this->getUser()->getId());
$i = 0;
foreach ($notdienste as $notdienst) {
$i++;
if ($i < 4) {
if ($notdienst->getGelesen() == 0) {
$notdienst->setGelesen(1);
} elseif ($notdienst->getGelesen() == 2) {
$notdienst->setGelesen(3);
}
$entityManager->persist($notdienst);
$entityManager->flush();
} else {
break;
}
}
return $this->render('user/firma/firma_info.html.twig', [
'firmenmitglieder' => $firmenmitglieder,
'lable' => $this->getLableInternerBereich(),
'id' => $id,
'seite' => $seite,
'alleDateien' => $dateien,
'freigaben' => $RechteDateienArr,
'freigabenDokumente' => $DokumenteArr,
'rubriken' => $rubriken,
'notifications' => $notifications,
'firmengruppenChats' => $firmengruppenChats,
'alleNews' => $erlaubteNews,
'alleEvents' => $erlaubteEvents,
'alleUmfragen' => $erlaubteUmfragen,
'umfrageAbgeschlossenIDs' => $umfrageAbgeschlossenIDs,
'schulungen' => $schulungen,
'chatNachrichten' => $chatNachrichten,
'empfehlungen' => $empfehlungen,
'notdienste' => $notdienste,
]);
}
#[Route('/user/firma/notdienst', name: 'user_firma_notdienst')]
public function user_firma_notdienst(NotdienstRepository $notdienstRepository): Response
{
$notdienste = $notdienstRepository->findNotdiensteUserseite($this->getUser()->getFirmenProfil()->getId());
return $this->render('user/firma/notdienst.html.twig', [
'notdienste' => $notdienste,
'lable' => $this->getLableInternerBereich(),
]);
}
#[Route('/user/firma/notdienst_auf_gelesen_setzen', name: 'user_firma_notdienst_auf_gelesen_setzen')]
public function user_firma_notdienst_auf_gelesen_setzen(Request $request, NotdienstRepository $notdienstRepository,
EntityManagerInterface $entityManager): Response
{
$notdienstIDs = $request->get('ungelesenIDs');
$notdienste = $notdienstRepository->findBy(['id' => $notdienstIDs, 'firma' => $this->getUser()->getFirmenprofil()]);
foreach ($notdienste as $notdienst) {
if ($notdienst->getUser()?->getId() == $this->getUser()->getId()) {
if ($notdienst->getGelesen() == 0) {
$notdienst->setGelesen(1);
$entityManager->persist($notdienst);
}
if ($notdienst->getGelesen() == 2) {
$notdienst->setGelesen(3);
$entityManager->persist($notdienst);
}
}
if ($notdienst->getErsatzUser()?->getId() == $this->getUser()->getId()) {
if ($notdienst->getGelesenErsatz() == 0) {
$notdienst->setGelesenErsatz(1);
$entityManager->persist($notdienst);
}
if ($notdienst->getGelesenErsatz() == 2) {
$notdienst->setGelesenErsatz(3);
$entityManager->persist($notdienst);
}
}
}
$entityManager->flush();
$returnData['error'] = false;
return new JsonResponse($returnData);
}
#[Route('/user/firma/notdienst_bestaetigen', name: 'user_firma_notdienst_bestaetigen')]
public function user_firma_notdienst_bestaetigen(Request $request,
NotdienstRepository $notdienstRepository,
EntityManagerInterface $entityManager): Response
{
$returnData['error'] = false;
$id = $request->get('notdienstId');
$notdienst = $notdienstRepository->findOneBy(['id' => $id, 'firma' => $this->getUser()->getFirmenprofil()]);
if ($notdienst != null && ($notdienst->getUser()->getId() == $this->getUser()->getId() || $notdienst->getErsatzUser()->getId() == $this->getUser()->getId())) {
if ($notdienst->getUser()?->getId() == $this->getUser()->getId()) {
$notdienst->setGelesen(4);
}
if ($notdienst->getErsatzUser()?->getId() == $this->getUser()->getId()) {
$notdienst->setGelesenErsatz(4);
}
$entityManager->persist($notdienst);
$entityManager->flush();
$returnData['error'] = false;
}
return new JsonResponse($returnData);
}
#[Route('/user/firma/notdienst_alle_bestaetigen', name: 'user_firma_notdienst_alle_bestaetigen')]
public function user_firma_notdienst_alle_bestaetigen(Request $request,
NotdienstRepository $notdienstRepository,
EntityManagerInterface $entityManager): Response
{
$returnData['error'] = false;
$bestaetigungenIDs = $request->get('bestaetigungenIDs');
$notdienste = $notdienstRepository->findBy(['id' => $bestaetigungenIDs, 'firma' => $this->getUser()->getFirmenprofil()]);
foreach ($notdienste as $notdienst) {
if ($notdienst != null && ($notdienst->getUser()?->getId() == $this->getUser()->getId() || $notdienst->getErsatzUser()?->getId() == $this->getUser()->getId())) {
if ($notdienst->getUser()?->getId() == $this->getUser()->getId()) {
$notdienst->setGelesen(4);
$entityManager->persist($notdienst);
}
if ($notdienst->getErsatzUser()?->getId() == $this->getUser()->getId()) {
$notdienst->setGelesenErsatz(4);
$entityManager->persist($notdienst);
}
}
}
$entityManager->flush();
return new JsonResponse($returnData);
}
#[Route('/user/firma/notdienst_uebernehmen', name: 'user_firma_notdienst_uebernehmen')]
public function user_firma_notdienst_uebernehmen(Request $request,
NotdienstRepository $notdienstRepository,
EntityManagerInterface $entityManager): Response
{
$returnData['error'] = true;
$returnData['art'] = 1;
$returnData['hinweis'] = 'Dieser Notdienst wurde bereits von jemand anderen übernommen.';
$id = $request->get('notdienstId');
$notdienst = $notdienstRepository->findOneBy(['id' => $id, 'firma' => $this->getUser()->getFirmenprofil()]);
if ($notdienst != null) {
$notdienstVorhanden = $notdienstRepository->findNotdienstBereitsEingeteilt($this->getUser()->getFirmenprofil(), $this->getUser()->getId(), $notdienst->getVon(), $notdienst->getId());
$datenSpeichern = true;
$momentanesStartDatumUS = $notdienst->getVon()->format('YmdHis');
$momentanesEndeDatumUS = $notdienst->getBis()->format('YmdHis');
foreach ($notdienstVorhanden as $vorhanden) {
$kontrolleStartDatumUS = $vorhanden->getVon()->format('YmdHis');
$kontrolleEndeDatumUS = $vorhanden->getBis()->format('YmdHis');
if (($kontrolleStartDatumUS >= $momentanesStartDatumUS && $kontrolleStartDatumUS < $momentanesEndeDatumUS) || ($kontrolleEndeDatumUS > $momentanesStartDatumUS && $kontrolleEndeDatumUS <= $momentanesEndeDatumUS)) {
$datenSpeichern = false;
}
if (($momentanesStartDatumUS >= $kontrolleStartDatumUS && $momentanesStartDatumUS < $kontrolleEndeDatumUS) || ($momentanesEndeDatumUS > $kontrolleStartDatumUS && $momentanesEndeDatumUS <= $kontrolleEndeDatumUS)) {
$datenSpeichern = false;
}
}
if ($datenSpeichern) {
if ($notdienst->getUser() == null && $notdienst->getVorname() == null) {
$notdienst->setUser($this->getUser());
if ($notdienst->getGelesen() < 2) {
$notdienst->setGelesen(1);
} else {
$notdienst->setGelesen(4);
}
$notdienst->setVorschlagAnMitarbeiterIds(null);
$notdienst->setPushNotificationDatum($notdienst->getVon());
$entityManager->persist($notdienst);
$returnData['error'] = false;
} else {
if ($notdienst->getErsatzUser() == null && $notdienst->getErsatzVorname() == null) {
$notdienst->setErsatzUser($this->getUser());
if ($notdienst->getGelesenErsatz() < 2) {
$notdienst->setGelesenErsatz(1);
} else {
$notdienst->setGelesenErsatz(4);
}
$notdienst->setVorschlagAnMitarbeiterIds(null);
$notdienst->setPushNotificationDatum($notdienst->getVon());
$entityManager->persist($notdienst);
$returnData['error'] = false;
}
}
$entityManager->flush();
} else {
$returnData['art'] = 2;
$returnData['hinweis'] = 'Du hast bereits Notdienst in diesem Zeitraum und kannst nicht annehmen.';
}
}
return new JsonResponse($returnData);
}
#[Route('/user/firma/notdienst_ablehnen', name: 'user_firma_notdienst_ablehnen')]
public function user_firma_notdienst_ablehnen(Request $request,
NotdienstRepository $notdienstRepository,
EntityManagerInterface $entityManager): Response
{
$returnData['error'] = true;
$id = $request->get('notdienstId');
$notdienst = $notdienstRepository->findOneBy(['id' => $id, 'firma' => $this->getUser()->getFirmenprofil()]);
if ($notdienst != null && $notdienst->getVorschlagAnMitarbeiterIds() != null) {
$abgelehntIDs = $notdienst->getVorschlagAbgelehntIds() == null ? [] : json_decode($notdienst->getVorschlagAbgelehntIds(), true);
$abgelehntIDs[] = $this->getUser()->getId();
$notdienst->setVorschlagAbgelehntIds(json_encode($abgelehntIDs));
$entityManager->persist($notdienst);
$returnData['error'] = false;
$entityManager->flush();
}
return new JsonResponse($returnData);
}
#[Route('/user/firma/dateien/{fenster}', name: 'user_firma_dateien')]
public function user_firma_dateien($fenster, UserNotificationRepository $notificationRepository,
EntityManagerInterface $entityManager,
FirmenDateimanagerRepository $firmenDateimanagerRepository): Response
{
$userId = $this->getUser()->getId();
$alleFirmendateien = $firmenDateimanagerRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()]);
$empfangeneDateienIDs = [];
if ($alleFirmendateien != null) {
foreach ($alleFirmendateien as $datei) {
if ($datei->getDownloadRechte() != null) {
$downloadRechte = json_decode($datei->getDownloadRechte(), true);
foreach ($downloadRechte['rechte'] as $rechte) {
if ($rechte['userId'] == $userId) {
$empfangeneDateienIDs[] = $datei->getId();
break;
}
}
}
}
}
$empfangeneDateien = $firmenDateimanagerRepository->findBy(['id' => $empfangeneDateienIDs], ['upload_datum' => 'DESC']);
$gesendeteDateien = $firmenDateimanagerRepository->findBy(['user_id' => $this->getUser()->getId()], ['upload_datum' => 'DESC']);
$notificationsDateien = $notificationRepository->findBy(['user' => $this->getUser()->getId(), 'type' => 1]);
if ($notificationsDateien != null) {
foreach ($notificationsDateien as $notificationsDatei) {
$entityManager->remove($notificationsDatei);
$entityManager->flush();
}
}
return $this->render('user/firma/dateien.html.twig', [
'firmenmitglieder' => $this->getUserBC_Firmenmitglieder_ohne_provisorischer_mitarbeiter(),
'lable' => $this->getLableInternerBereich(),
'empfangeneDateien' => $empfangeneDateien,
'gesendeteDateien' => $gesendeteDateien,
'fenster' => $fenster,
]);
}
#[Route('/user/firma/dokumente/{rubrik}', name: 'user_firma_dokumente')]
public function user_firma_dokumente($rubrik,
UserNotificationRepository $notificationRepository,
FirmenDokumenteRubrikenRepository $dokumenteRubrikenRepository,
FirmenGruppenRepository $firmenGruppenRepository,
EntityManagerInterface $entityManager,
FirmenDokumenteRepository $firmenDokumenteRepository): Response
{
$lable = $this->getLableInternerBereich();
$rubrikName = 'Alle ' . $lable['dokumente'];
if ($rubrik == 0) {
$dokumente = $firmenDokumenteRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()], ['upload_datum' => 'DESC']);
} else {
$ausgewaehlteRubrik = $dokumenteRubrikenRepository->findOneBy(['id' => $rubrik]);
$dokumente = $firmenDokumenteRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId(), 'rubrik' => $ausgewaehlteRubrik], ['upload_datum' => 'DESC']);
$rubrikName = $ausgewaehlteRubrik->getRubrik();
}
$notifications = $notificationRepository->findBy(['user' => $this->getUser()->getId(), 'type' => 5]);
$erlaubteDokumenteIDs = [];
if ($dokumente != null) {
$alleFirmengruppen = $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()]);
foreach ($dokumente as $dokument) {
if ($this->getRechteTabellenzeileId($dokument->getDownloadRechte(), $dokument->getZugriffsrechte(), $alleFirmengruppen)) {
$erlaubteDokumenteIDs[] = $dokument->getId();
if ($notifications != null) {
foreach ($notifications as $notification) {
if ($notification->getText() == $dokument->getDateiname()) {
$entityManager->remove($notification);
$entityManager->flush();
}
}
}
}
}
}
$erlaubteDokumente = null;
if (count($erlaubteDokumenteIDs) > 0) {
$erlaubteDokumente = $firmenDokumenteRepository->findBy(['id' => $erlaubteDokumenteIDs], ['upload_datum' => 'DESC']);
}
return $this->render('user/firma/dokumente.html.twig', [
'dokumente' => $erlaubteDokumente,
'lable' => $lable,
'rubrik' => $rubrikName,
'rubrikId' => $rubrik,
]);
}
#[Route('/user/firma/news', name: 'user_firma_news')]
public function user_firma_news(UserRepository $userRepository,
FirmenNewsRepository $firmenNewsRepository,
FirmenGruppenRepository $firmenGruppenRepository,
UserNotificationRepository $notificationRepository): Response
{
$news = $firmenNewsRepository->findBy(['event' => 0, 'firma' => $this->getUser()->getFirmenProfil()->getId()], ['datum' => 'DESC']);
$alleFirmengruppen = $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()]);
$erlaubteNewsIDs = [];
if ($news != null) {
foreach ($news as $new) {
if ($this->getRechteTabellenzeileId($new->getSichtbar(), $new->getZugriffsrechte(), $alleFirmengruppen)) {
$erlaubteNewsIDs[] = $new->getId();
}
}
}
$erlaubteNews = [];
if (count($erlaubteNewsIDs) > 0) {
$erlaubteNews = $firmenNewsRepository->findBy(['id' => $erlaubteNewsIDs], ['datum' => 'DESC']);
}
$notifications = $notificationRepository->findBy(['user' => $this->getUser()->getId(), 'type' => 6]);
return $this->render('user/firma/news.html.twig', [
'firmenmitglieder' => $userRepository->findBy(['firmen_profil' => $this->getUser()->getFirmenProfil()->getId()]),
'lable' => $this->getLableInternerBereich(),
'alleNews' => $erlaubteNews,
'notifications' => $notifications,
]);
}
#[Route('/user/firma/events', name: 'user_firma_events')]
public function user_firma_events(UserRepository $userRepository,
FirmenNewsRepository $firmenNewsRepository,
FirmenGruppenRepository $firmenGruppenRepository,
UserNotificationRepository $notificationRepository): Response
{
$events = $firmenNewsRepository->findBy(['event' => [1, 2], 'firma' => $this->getUser()->getFirmenProfil()->getId()], ['datum' => 'DESC']);
$alleFirmengruppen = $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()]);
$erlaubteEventIDs = [];
if ($events != null) {
foreach ($events as $event) {
if ($this->getRechteTabellenzeileId($event->getSichtbar(), $event->getZugriffsrechte(), $alleFirmengruppen)) {
$erlaubteEventIDs[] = $event->getId();
}
}
}
$erlaubteEvents = [];
if (count($erlaubteEventIDs) > 0) {
$erlaubteEvents = $firmenNewsRepository->findBy(['id' => $erlaubteEventIDs], ['datum' => 'DESC']);
}
$notifications = $notificationRepository->findBy(['user' => $this->getUser()->getId(), 'type' => 7]);
return $this->render('user/firma/events.html.twig', [
'firmenmitglieder' => $userRepository->findBy(['firmen_profil' => $this->getUser()->getFirmenProfil()->getId()]),
'lable' => $this->getLableInternerBereich(),
'alleEvents' => $erlaubteEvents,
'notifications' => $notifications,
]);
}
#[Route('/user/firma/news/ansehen/{id}/{admin}', name: 'user_firma_news_ansehen')]
public function user_firma_news_ansehen($id, $admin, UserRepository $userRepository,
FirmenNewsRepository $firmenNewsRepository,
UserNotificationRepository $notificationRepository,
FirmenGruppenRepository $firmenGruppenRepository,
EmailWarteschlangeRepository $emailWarteschlangeRepository,
FirebaseNotificationWarteschlangeRepository $firebaseNotificationWarteschlangeRepository,
EntityManagerInterface $entityManager): Response
{
$zugriffErlaubt = false;
$news = $firmenNewsRepository->findOneBy(['id' => $id, 'firma' => $this->getUser()->getFirmenProfil()->getId()]);
if ($news == null) {
return $this->redirectToRoute('user_start');
}
$alleFirmengruppen = $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()]);
if (in_array("ROLE_FIRMA_ADMIN_NEWS_EVENTS", $this->getUser()->getRoles())) {
$zugriffErlaubt = true;
} else {
if ($this->getRechteTabellenzeileId($news->getSichtbar(), $news->getZugriffsrechte(), $alleFirmengruppen)) {
$zugriffErlaubt = true;
}
}
if (!$zugriffErlaubt) {
return $this->redirectToRoute('user_start');
}
$notifications = $notificationRepository->findOneBy(['user' => $this->getUser()->getId(), 'type' => 6, 'link' => $id]);
if ($notifications != null) {
$entityManager->remove($notifications);
$entityManager->flush();
}
$notifications = $notificationRepository->findOneBy(['user' => $this->getUser()->getId(), 'type' => 7, 'link' => $id]);
if ($notifications != null) {
$entityManager->remove($notifications);
$entityManager->flush();
}
$newsGelsen = json_decode($news->getGelesen(), true);
$newsGelsen[] = $this->getUser()->getId();
$newsGelsen = json_encode(array_unique($newsGelsen));
$news->setGelesen($newsGelsen);
$entityManager->persist($news);
$entityManager->flush();
if ($news->getUuid() != null) {
$emails = $emailWarteschlangeRepository->findBy(['user' => $this->getUser(), 'uuid' => $news->getUuid()]);
$notifications = $firebaseNotificationWarteschlangeRepository->findBy(['user' => $this->getUser(), 'uuid' => $news->getUuid()]);
foreach ($emails as $email) {
$entityManager->remove($email);
}
foreach ($notifications as $notification) {
$entityManager->remove($notification);
}
$entityManager->flush();
}
$newsText = $news->getText();
$sliders = $news->getSliders();
if ($sliders != null) {
$sliders = json_decode($sliders, true);
if (count($sliders) > 0) {
preg_match_all('{slider-[\d+]}', $newsText, $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
$sliderID = explode('-', $match[0])[1];
$currentSlider = null;
foreach ($sliders as $slider) {
if ($slider['id'] === (int)$sliderID) {
$currentSlider = $slider;
break;
}
}
$sliderHTML = '<div id="carousel-' . $sliderID . '" class="carousel slide">
<div class="carousel-inner">';
$bildCount = 0;
foreach ($currentSlider['bilder'] as $bild) {
$active = $bildCount == 0 ? 'active' : '';
$sliderHTML .= '<div class="carousel-item ' . $active . '">
<img src="' . $this->generateUrl('admin_firma_datei_ansehen', ['id' => $bild]) . '?bild=" class="d-block w-100">
</div>';
$bildCount++;
}
$sliderHTML .= '</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carousel-' . $sliderID . '" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#carousel-' . $sliderID . '" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
<script>
jQuery(function($){
const carousel = new bootstrap.Carousel(document.querySelector("#carousel-' . $sliderID . '"), {
ride: false,
touch: true
})
});
</script>';
$newsText = str_replace('{' . $match[0] . '}', $sliderHTML, $newsText);
}
}
}
return $this->render('user/firma/news_ansehen.html.twig', [
'firmenmitglieder' => $userRepository->findBy(['firmen_profil' => $this->getUser()->getFirmenProfil()->getId()]),
'lable' => $this->getLableInternerBereich(),
'news' => $news,
'newsText' => $newsText,
'admin' => $admin,
]);
}
#[Route('/user/firma/news/zusagen/{id}', name: 'user_firma_news_zusagen')]
public function user_firma_news_zusagen(Request $request, $id,
FirmenNewsRepository $firmenNewsRepository,
EntityManagerInterface $entityManager): Response
{
$returnData['error'] = false;
$userId = $this->getUser()->getId();
$zusage = (int)$request->get('entscheidung');
$news = $firmenNewsRepository->findOneBy(['id' => $id, 'event' => 2, 'firma' => $this->getUser()->getFirmenProfil()->getId()]);
$newsZusagen = $news->getZusagen() == null ? [] : json_decode($news->getZusagen(), true);
$newsAbsagen = $news->getAbsagen() == null ? [] : json_decode($news->getAbsagen(), true);
if ($news->getMaxTeilnehmer() > 0) {
if ($news->getMaxTeilnehmer() - count($newsZusagen) <= 0) {
$returnData['error'] = true;
return new JsonResponse($returnData);
}
}
$datum = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
$datumKontrolle = $datum->format("Y-m-d H:i:s");
$abgabeDatum = $news->getAbgabeDatum()->format("Y-m-d H:i:s");
if ($abgabeDatum >= $datumKontrolle) {
if ($zusage == 1) {
$newsZusagen[] = $userId;
$newsZusagen = array_unique($newsZusagen);
if ($newsAbsagen != null) {
$newsAbsagen = array_diff($newsAbsagen, [$userId]);
}
} else {
$newsAbsagen[] = $userId;
$newsAbsagen = array_unique($newsAbsagen);
if ($newsZusagen != null) {
$newsZusagen = array_diff($newsZusagen, [$userId]);
}
}
$newsZusagen = count($newsZusagen) == 0 ? null : json_encode($newsZusagen);
$newsAbsagen = count($newsAbsagen) == 0 ? null : json_encode($newsAbsagen);
$news->setZusagen($newsZusagen);
$news->setAbsagen($newsAbsagen);
$entityManager->persist($news);
$entityManager->flush();
$grundAngabe = $request->get('grund');
foreach ($news->getGruende() as $grund) {
if ($grund->getUserId() == $userId) {
$entityManager->remove($grund);
$entityManager->flush();
}
}
if ($grundAngabe != '-1') {
$neuerGrund = new FirmenNewsEventEntscheidungGrund();
$neuerGrund->setNews($news);
$neuerGrund->setUserId($userId);
$neuerGrund->setGrund($grundAngabe);
$entityManager->persist($neuerGrund);
$entityManager->flush();
}
}
return new JsonResponse($returnData);
}
#[Route('/user/firma/news/lesebestaetigung/{id}', name: 'user_firma_news_lesebestaetigung')]
public function user_firma_news_lesebestaetigung($id,
FirmenNewsRepository $firmenNewsRepository,
EntityManagerInterface $entityManager): Response
{
$returnData['error'] = false;
$userId = $this->getUser()->getId();
$news = $firmenNewsRepository->findOneBy(['id' => $id, 'event' => 0, 'firma' => $this->getUser()->getFirmenProfil()->getId(), 'bestaetigung' => 1]);
if ($news != null) {
$bestaetigungen = $news->getZusagen() == null ? [] : json_decode($news->getZusagen(), true);
$bestaetigungen[] = $userId;
$bestaetigungen = array_unique($bestaetigungen);
$news->setZusagen(json_encode($bestaetigungen));
$entityManager->persist($news);
$entityManager->flush();
}
return new JsonResponse($returnData);
}
#[Route('/user/firma/firmenmitglieder', name: 'user_firma_mitglieder')]
public function user_firma_mitglieder(UserRepository $userRepository): Response
{
return $this->render('user/firma/firmenmitglieder.html.twig', [
'firmenmitglieder' => $userRepository->findBy(['firmen_profil' => $this->getUser()->getFirmenProfil()->getId()]),
'lable' => $this->getLableInternerBereich(),
]);
}
#[Route('/user/firma/empfehlungen', name: 'user_firma_empfehlungen')]
public function user_firma_empfehlungen(UserEmpfehlungenRepository $userEmpfehlungenRepository,
UserNotificationRepository $notificationRepository,
SchulungenRepository $schulungenRepository,
BuchungenRepository $buchungenRepository,
EntityManagerInterface $entityManager): Response
{
// Empfehlungen erhalten
$neueEmpfehlungenIDs = [];
$schulungsIDs = [];
$buchungenIDs = [];
$notifications = $notificationRepository->findBy(['user' => $this->getUser()->getId(), 'type' => 8]);
if ($notifications != null) {
foreach ($notifications as $notification) {
$neueEmpfehlungenIDs[] = (int)$notification->getLink();
$entityManager->remove($notification);
$entityManager->flush();
}
}
$empfehlungen = $userEmpfehlungenRepository->findBy(['user' => $this->getUser()], ['datum' => 'DESC']);
foreach ($empfehlungen as $empfehlung) {
$schulungsIDs[] = (int)$empfehlung->getSchulungId();
if ($empfehlung->getBuchungenId() != null) {
$buchungenIDs[] = $empfehlung->getBuchungenId();
}
}
$schulungen = $schulungenRepository->findBy(['id' => $schulungsIDs]);
$buchungen = $buchungenRepository->findBy(['id' => $buchungenIDs]);
$weiterempfehlungSchulungsIDs = [];
$weiterempfehlungen = $userEmpfehlungenRepository->findBy(['von_user_id' => $this->getUser()]);
foreach ($weiterempfehlungen as $empfehlung) {
$weiterempfehlungSchulungsIDs[] = (int)$empfehlung->getSchulungId();
}
$weiterempfehlungenSchulungen = $schulungenRepository->findBy(['id' => $weiterempfehlungSchulungsIDs]);
return $this->render('user/firma/empfehlungen.html.twig', [
'empfehlungen' => $empfehlungen,
'neueEmpfehlungenIDs' => $neueEmpfehlungenIDs,
'schulungen' => $schulungen,
'buchungen' => $buchungen,
'weiterempfehlungen' => $weiterempfehlungen,
'weiterempfehlungenSchulungen' => $weiterempfehlungenSchulungen,
]);
}
#[Route('/user/firma/firmenlinks', name: 'user_firma_firmenlinks')]
public function user_firma_firmenlinks(FirmenprofilRepository $firmenprofilRepository): Response
{
$firmenlinks = [];
$firma = $firmenprofilRepository->findOneBy(['id' => $this->getUser()->getFirmenprofil()]);
if ($firma?->getMitarbeiterInternMenuFreigabe() != null) {
$menuFreigabe = json_decode($firma->getMitarbeiterInternMenuFreigabe(), true);
if (isset($menuFreigabe['firmenLinks'])) {
$firmenlinks = $menuFreigabe['firmenLinks'];
}
}
return $this->render('user/firma/firmenlinks.html.twig', [
'firmenlinks' => $firmenlinks,
]);
}
#[Route('/user/firma/empfehlungen_erneuern/{id}', name: 'user_firma_empfehlungen_erneuern')]
public function user_firma_empfehlungen_erneuern($id, UserEmpfehlungenRepository $userEmpfehlungenRepository,
EntityManagerInterface $entityManager): Response
{
$returnData['error'] = true;
$returnData['id'] = $id;
$empfehlung = $userEmpfehlungenRepository->findOneBy(['id' => $id, 'firma' => $this->getUser()->getFirmenprofil()]);
if ($empfehlung->getVonUserId() == $this->getUser()->getId() || in_array("ROLE_FIRMA_BUCHUNGEN", $this->getUser()->getRoles())) {
if ($empfehlung != null) {
$datumClone = clone $empfehlung->getDatum();
$datumBisEnde = $datumClone->modify('+' . $empfehlung->getTageAktiv() . ' day');
$differenz = $datumBisEnde->diff(new \DateTime('now', new \DateTimeZone('Europe/Berlin')));
$dazu = 30 - $differenz->days;
$empfehlung->setTageAktiv($empfehlung->getTageAktiv() + $dazu);
$entityManager->persist($empfehlung);
$entityManager->flush();
$returnData['error'] = false;
}
}
return new JsonResponse($returnData);
}
#[Route('/user/firma/empfehlungen_loeschen/{id}', name: 'user_firma_empfehlungen_loeschen')]
public function user_firma_empfehlungen_loeschen($id, UserEmpfehlungenRepository $userEmpfehlungenRepository,
UserNotificationRepository $notificationRepository,
EntityManagerInterface $entityManager): Response
{
$returnData['error'] = true;
$returnData['id'] = $id;
$empfehlung = $userEmpfehlungenRepository->findOneBy(['id' => $id, 'firma' => $this->getUser()->getFirmenprofil()]);
if ($empfehlung->getVonUserId() == $this->getUser()->getId() || in_array("ROLE_FIRMA_BUCHUNGEN", $this->getUser()->getRoles())) {
if ($empfehlung != null) {
$notifications = $notificationRepository->findBy(['user' => $empfehlung->getUser(), 'link' => $empfehlung->getId(), 'type' => 8]);
if ($notifications != null) {
foreach ($notifications as $notification) {
$entityManager->remove($notification);
$entityManager->flush();
}
}
$entityManager->remove($empfehlung);
$entityManager->flush();
$returnData['error'] = false;
}
}
return new JsonResponse($returnData);
}
#[Route('/user/firma/datei/ansehen/{id}', name: 'admin_firma_datei_ansehen')]
public function admin_firma_datei_ansehen($id, FirmenprofilRepository $firmenprofilRepository,
FirmenDateienRepository $firmenDateienRepository): Response
{
$firmenprofilId = $this->getUser()?->getFirmenProfil()?->getId();
$datei = null;
if ($firmenprofilId != null) {
$firmenprofil = $firmenprofilRepository->findOneBy(['id' => $firmenprofilId]);
$datei = $firmenDateienRepository->findOneBy(['id' => $id, 'firma' => $firmenprofil]);
}
if ($datei == null) {
return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten", 403);
}
$serverFilePath = $this->getParameter('admin_ordner') . '/dateimanager/' . $firmenprofilId . '/' . $datei->getSpeichername();
$filenextension = explode('.', $datei->getSpeichername())[1];
$speichername = $datei->getDateiname() . '.' . $filenextension;
$response = new BinaryFileResponse($serverFilePath);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $speichername);
return $response;
}
#[Route('/user/firma/interne_schulungen_datei/ansehen/{id}/{inhaltId}', name: 'admin_firma_interne_schulungen_datei_ansehen')]
public function admin_firma_interne_schulungen_datei_ansehen($id, $inhaltId, FirmenprofilRepository $firmenprofilRepository,
FirmenInterneSchulungenInhaltRepository $inhaltRepository,
FirmenDateienRepository $firmenDateienRepository): Response
{
$interneSchulungInhalt = $inhaltRepository->findOneBy(['id' => $inhaltId]);
$firma = $this->getUser()->getFirmenProfil();
if ($interneSchulungInhalt->getInterneSchulung()->getOriginalSchulungsId() != null) {
$firma = $firmenprofilRepository->findOneBy(['id' => 1]);
}
$datei = $firmenDateienRepository->findOneBy(['id' => $id, 'firma' => $firma]);
$inhalt = $inhaltRepository->findOneBy(['id' => $inhaltId, 'datei' => $datei]);
if ($inhalt == null) {
$dateiGefunden = false;
foreach ($interneSchulungInhalt->getSprachen() as $sprachen) {
if ($sprachen->getDatei()->getId() == $datei->getId()) {
$dateiGefunden = true;
}
}
if (!$dateiGefunden) {
return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten", 403);
}
}
$serverFilePath = $this->getParameter('admin_ordner') . '/dateimanager/' . $firma->getId() . '/' . $datei->getSpeichername();
$filenextension = explode('.', $datei->getSpeichername())[1];
$speichername = $datei->getDateiname() . '.' . $filenextension;
$response = new BinaryFileResponse($serverFilePath);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $speichername);
return $response;
}
#[Route('/user/firma/interne_schulung_sprachen_datei/ansehen/{id}/{inhaltId}', name: 'admin_firma_interne_schulung_sprachen_datei_ansehen')]
public function admin_firma_interne_schulung_sprachen_datei_ansehen($id, $inhaltId, FirmenprofilRepository $firmenprofilRepository,
FirmenInterneSchulungInhaltSprachenRepository $inhaltSprachenRepository,
FirmenDateienRepository $firmenDateienRepository): Response
{
$firma = $firmenprofilRepository->findOneBy(['id' => 1]);
$datei = $firmenDateienRepository->findOneBy(['id' => $id, 'firma' => $firma]);
$inhalt = $inhaltSprachenRepository->findOneBy(['id' => $inhaltId, 'datei' => $datei]);
if ($inhalt == null) {
return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten", 403);
}
$serverFilePath = $this->getParameter('admin_ordner') . '/dateimanager/' . $firma->getId() . '/' . $datei->getSpeichername();
$filenextension = explode('.', $datei->getSpeichername())[1];
$speichername = $datei->getDateiname() . '.' . $filenextension;
$response = new BinaryFileResponse($serverFilePath);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $speichername);
return $response;
}
#[Route('/user/firma/datei/download/{seite}/{seiteId}/{dateiId}', name: 'user_firma_datei_download')]
public function admin_firma_datei_download($seite, $seiteId, $dateiId,
FirmenNewsRepository $firmenNewsRepository,
FirmenNewsAnhangRepository $firmenNewsAnhangRepository,
FirmenGruppenRepository $firmenGruppenRepository,
FirmenInterneSchulungenInhaltRepository $firmenInterneSchulungenInhaltRepository,
FirmenprofilRepository $firmenprofilRepository,
FirmenDateienRepository $firmenDateienRepository): Response
{
$firmenprofilId = $this->getUser()->getFirmenProfil()->getId();
$datei = $firmenDateienRepository->findOneBy(['id' => $dateiId, 'firma' => $this->getUser()?->getFirmenProfil()]);
$alleFirmengruppen = $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()]);
if ($seite == 'interneSchulung') {
$interneSchulungInhalt = $firmenInterneSchulungenInhaltRepository->findOneBy(['id' => $seiteId]);
$firma = $this->getUser()->getFirmenProfil();
if ($interneSchulungInhalt->getInterneSchulung()->getOriginalSchulungsId() != null) {
$firma = $firmenprofilRepository->findOneBy(['id' => 1]);
$firmenprofilId = $firma->getId();
}
$datei = $firmenDateienRepository->findOneBy(['id' => $dateiId, 'firma' => $firma]);
}
if ($datei == null) {
return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte starte die Seite handwerkXcampus.de neu", 403);
}
$zugriffErlaubt = false;
if (in_array("ROLE_FIRMA_ADMIN_NEWS_EVENTS", $this->getUser()->getRoles()) && $seite != 'interneSchulung') {
$zugriffErlaubt = true;
} else {
if ($seite == 'news') {
$news = $firmenNewsRepository->findOneBy(['id' => $seiteId, 'firma' => $this->getUser()->getFirmenProfil()]);
$newsAnhang = $firmenNewsAnhangRepository->findOneBy(['news' => $news, 'datei' => $datei]);
if ($this->getRechteTabellenzeileId($news->getSichtbar(), $news->getZugriffsrechte(), $alleFirmengruppen)) {
$zugriffErlaubt = true;
}
}
if ($seite == 'interneSchulung') {
$interneSchulungInhalt = $firmenInterneSchulungenInhaltRepository->findOneBy(['id' => $seiteId, 'datei' => $datei]);
if ($interneSchulungInhalt != null && $interneSchulungInhalt->getInterneSchulung()->getSichtbar() == 1 && $interneSchulungInhalt->getInterneSchulung()->getFirma() == $this->getUser()->getFirmenProfil()) {
$zugriffErlaubt = true;
}
}
}
if ($zugriffErlaubt == false) {
return new JsonResponse("Keine Berechtigung. Bitte starte die Seite handwerkXcampus.de neu", 403);
}
$serverFilePath = $this->getParameter('admin_ordner') . '/dateimanager/' . $firmenprofilId . '/' . $datei->getSpeichername();
$filenextension = explode('.', $datei->getSpeichername())[1];
$speichername = $datei->getDateiname() . '.' . $filenextension;
$response = new BinaryFileResponse($serverFilePath);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $speichername);
return $response;
}
// Bild einbinden aus dem var Ordner mit Berechtigungsabfrage
#[Route('/user/firma/dokumente/ansehen/{id}', name: 'user_firma_dokument_ansehen')]
public function user_firma_dokument_ansehen($id, FirmenDokumenteRepository $firmenDokumenteRepository,
FirmenGruppenRepository $firmenGruppenRepository,
EntityManagerInterface $entityManager): Response
{
$datei = $firmenDokumenteRepository->findOneBy(['id' => $id, 'firma' => $this->getUser()?->getFirmenProfil()->getId()]);
$datum = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
$alleFirmengruppen = $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()->getId()]);
if ($datei != null) {
$download = false;
if ($this->getRechteTabellenzeileId($datei->getDownloadRechte(), $datei->getZugriffsrechte(), $alleFirmengruppen)) {
$download = true;
}
if (!$download) {
return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten", 403);
}
$bestaetigungen = [];
$tmpBestaetigungen = $datei->getBestaetigungen();
if (strlen($tmpBestaetigungen)) {
$bestaetigungen = json_decode($tmpBestaetigungen, true);
}
$downloadEintragen = true;
if (isset($bestaetigungen['download'])) {
for ($i = 0; $i < count($bestaetigungen['download']); $i++) {
if ((int)$bestaetigungen['download'][$i]['userId'] == $this->getUser()->getId()) {
$downloadEintragen = false;
}
}
}
if ($downloadEintragen) {
$downloadArr = [];
$downloadArr['userId'] = $this->getUser()->getId();
$downloadArr['datum'] = $datum->format("d.m.Y H:i");
$downloadArr['bestaetigung'] = "";
$bestaetigungen["download"][] = $downloadArr;
$datei->setBestaetigungen(json_encode($bestaetigungen, true));
$entityManager->persist($datei);
$entityManager->flush();
}
} else {
return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten", 403);
}
$serverFilePath = $this->getParameter('admin_ordner') . '/dateimanager/' . $this->getUser()->getFirmenProfil()->getId() . '/' . $datei->getSpeichername();
$filenextension = explode('.', $datei->getSpeichername())[1];
$speichername = $datei->getDateiname() . '.' . $filenextension;
$response = new BinaryFileResponse($serverFilePath);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $speichername);
return $response;
}
#[Route('/user/firma/dokumente/bestaetigen/{id}', name: 'user_firma_dokument_bestaetigen')]
public function user_firma_dokument_bestaetigen($id, FirmenDokumenteRepository $firmenDokumenteRepository,
FirmenGruppenRepository $firmenGruppenRepository,
EntityManagerInterface $entityManager): Response
{
$jsonDataRechte = null;
$datei = $firmenDokumenteRepository->findOneBy(['id' => $id, 'firma' => $this->getUser()?->getFirmenProfil()->getId()]);
$datum = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
$alleFirmengruppen = $firmenGruppenRepository->findBy(['firma' => $this->getUser()->getFirmenProfil()]);
if ($datei != null) {
$download = false;
if ($this->getRechteTabellenzeileId($datei->getDownloadRechte(), $datei->getZugriffsrechte(), $alleFirmengruppen)) {
$download = true;
}
if (!$download) {
return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten", 403);
}
$bestaetigungen = [];
$tmpBestaetigungen = $datei->getBestaetigungen();
if (strlen($tmpBestaetigungen)) {
$bestaetigungen = json_decode($tmpBestaetigungen, true);
}
if (isset($bestaetigungen['download'])) {
for ($i = 0; $i < count($bestaetigungen['download']); $i++) {
if ((int)$bestaetigungen['download'][$i]['userId'] == $this->getUser()->getId()) {
if ((int)$bestaetigungen['download'][$i]['userId'] == $this->getUser()->getId()) {
if (strlen($bestaetigungen['download'][$i]['bestaetigung']) === 0) {
$bestaetigungen['download'][$i]['bestaetigung'] = $datum->format("d.m.Y H:i");
$datei->setBestaetigungen(json_encode($bestaetigungen, true));
$entityManager->persist($datei);
$entityManager->flush();
}
}
}
}
}
} else {
return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten", 403);
}
$returnData['error'] = false;
return new JsonResponse($returnData);
}
// Bild einbinden aus dem var Ordner mit Berechtigungsabfrage
#[Route('/user/firma/private_upload_datei/ansehen/{id}', name: 'user_firma_private_upload_datei_ansehen')]
public function dateienAnsehen($id, FirmenprofilRepository $firmenprofilRepository,
FirmenDateimanagerRepository $firmenDateimanagerRepository,
FirmenDateimanagerDownloadRepository $firmenDateimanagerDownloadRepository,
UserNotificationRepository $notificationRepository,
EntityManagerInterface $entityManager): Response
{
$jsonDataRechte = [];
$meineUserID = $this->getUser()->getId();
$firmenprofilId = $this->getUser()->getFirmenProfil()->getId();
$firmenprofil = $firmenprofilRepository->findOneBy(['id' => $firmenprofilId]);
$datei = $firmenDateimanagerRepository->findOneBy(['id' => $id, 'firma' => $firmenprofil]);
if ($datei->getUserId() != $meineUserID) {
$downloadRechte = $datei->getDownloadRechte();
if (strlen($downloadRechte)) {
$jsonDataRechte = json_decode($downloadRechte, true);
}
$download = false;
if (isset($jsonDataRechte['rechte'])) {
foreach ($jsonDataRechte['rechte'] as $data) {
if ((int)$data['userId'] == $meineUserID) {
$download = true;
}
}
}
if (!$download) {
return new JsonResponse("Es ist ein Fehler aufgetreten. Bitte Campus neu starten", 403);
}
$downloads = $firmenDateimanagerDownloadRepository->findBy(['datei' => $datei, 'user_id' => $meineUserID]);
foreach ($downloads as $meinDownload) {
$entityManager->remove($meinDownload);
$entityManager->flush();
}
$neuerDownload = new FirmenDateimanagerDownload();
$neuerDownload->setDatei($datei);
$neuerDownload->setUserId($meineUserID);
$neuerDownload->setDownloadDatum(new \DateTime('now', new \DateTimeZone('Europe/Berlin')));
$entityManager->persist($neuerDownload);
$entityManager->flush();
$notificationGelesen = $notificationRepository->findOneBy(['user' => $this->getUser()->getId(), 'von_user_id' => $datei->getUserId(), 'type' => 1, 'text' => $datei->getDateiname()]);
if ($notificationGelesen != null) {
$notificationGelesen->setGelesen(1);
$entityManager->persist($notificationGelesen);
$entityManager->flush();
}
}
$serverFilePath = $this->getParameter('admin_ordner') . '/dateimanager/' . $firmenprofilId . '/' . $datei->getSpeichername();
$filenextension = explode('.', $datei->getSpeichername())[1];
$speichername = $datei->getDateiname() . '.' . $filenextension;
$response = new BinaryFileResponse($serverFilePath);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $speichername);
return $response;
}
}