<?php
namespace App\Controller\userController;
use App\Controller\api\FirebaseController;
use App\Controller\api\GoogleMapsController;
use App\Controller\basisController\AllgemeineFunktionenController;
use App\Controller\basisController\UserBasisController;
use App\Controller\emailVersandController\MailsWarteschleifeController;
use App\Controller\masteradminController\SecurityController;
use App\Controller\oAuthLoginController\LoginController;
use App\Entity\CelseoIntranetVerbindung;
use App\Entity\Dozent;
use App\Entity\FirmenMitgliederanfrage;
use App\Entity\UserNotification;
use App\Repository\AdminSecurityRoleRepository;
use App\Repository\BuchungenRechnungenRepository;
use App\Repository\BuchungenRepository;
use App\Repository\BuchungenSeminareTeilnehmerRepository;
use App\Repository\CelseoIntranetVerbindungRepository;
use App\Repository\DozentRepository;
use App\Repository\FirebaseNotificationRepository;
use App\Repository\FirmenDateimanagerRepository;
use App\Repository\FirmenInterneSchulungenRepository;
use App\Repository\FirmenInterneSchulungenZertifikatRepository;
use App\Repository\FirmenMitgliederanfrageRepository;
use App\Repository\FirmenprofilRepository;
use App\Repository\GutscheincodesRepository;
use App\Repository\SchulungBeobachtenRepository;
use App\Repository\SchulungsArtRepository;
use App\Repository\SchulungsTermineRepository;
use App\Repository\UserFavoritenRepository;
use App\Repository\UserNotificationRepository;
use App\Repository\UserProfilRepository;
use App\Repository\UserRepository;
use App\Repository\UserRolesGekauftRepository;
use Doctrine\ORM\EntityManagerInterface;
use Kreait\Firebase\Contract\Messaging;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\String\Slugger\SluggerInterface;
use Symfony\Component\Finder\Finder;
use Symfony\Component\Uid\Uuid;
use Symfony\Contracts\HttpClient\HttpClientInterface;
#[Route('/user/profil')]
class UserProfilController extends UserBasisController
{
#[Route('/mein_profil/info/{seite}', name: 'user_profil_mein_profil_info')]
public function index($seite, BuchungenSeminareTeilnehmerRepository $buchungenSeminareTeilnehmerRepository,
FirmenInterneSchulungenZertifikatRepository $zertifikatRepository,
GutscheincodesRepository $gutscheincodesRepository,
UserFavoritenRepository $userFavoritenRepository): Response
{
$arrayScript = $this->getUserBC_script_bildupload();
$uploadTemplateScript = $arrayScript[0];
$downloadTemplateScript = $arrayScript[1];
return $this->render('user/profil/profil_info.html.twig', [
'seite' => $seite,
'gutscheine' => $gutscheincodesRepository->findBy(['an_user_id' => $this->getUser()->getId(), 'firma' => null]),
'zertifikate' => $zertifikatRepository->findBy(['user' => $this->getUser()], ['datum' => 'DESC']),
'favoritenanzahl' => count($userFavoritenRepository->findBy(['user_id' => $this->getUser()->getId()])),
'termine' => $buchungenSeminareTeilnehmerRepository->findBy(['user' => $this->getUser()->getId(), 'status' => 0]),
'uploadTemplateScript' => $uploadTemplateScript,
'downloadTemplateScript' => $downloadTemplateScript,
]);
}
#[Route('/mein_profil/account_loeschen', name: 'user_profil_mein_profil_account_loeschen')]
public function user_profil_mein_profil_account_loeschen(): Response
{
return $this->render('user/profil/profil_loeschen_abfrage.html.twig', [
]);
}
#[Route('/mein_profil/account_loeschen_durchfuehren', name: 'user_profil_mein_profil_account_loeschen_durchfuehren')]
public function user_profil_mein_profil_account_loeschen_durchfuehren(Request $request,
UserRepository $userRepository,
EntityManagerInterface $entityManager): Response
{
$returnData["error"] = true;
$user = $userRepository->findOneBy(['id' => $this->getUser()]);
if ($user != null) {
if (password_verify($request->get('kennwort'), $user->getPassword())) {
//Todo: alle Dateien löschen wenn irgendwann Aktiv
foreach ($user->getNotdienste() as $notdienst) {
$notdienst->setUser(null);
$notdienst->setVorname($user->getUserProfil()->getVorname());
$notdienst->setNachname($user->getUserProfil()->getNachname());
if ($notdienst->getErsatzUser() == null) {
$notdienst->setPushNotificationDatum(null);
}
$entityManager->persist($notdienst);
}
foreach ($user->getNotdiensteErsatz() as $notdienst) {
$notdienst->setErsatzUser(null);
$notdienst->setErsatzVorname($user->getUserProfil()->getVorname());
$notdienst->setErsatzNachname($user->getUserProfil()->getNachname());
$notdienst->setPushNotificationDatum(null);
$entityManager->persist($notdienst);
}
$entityManager->flush();
$user->setFirmenProfil(null);
$user->setEmail('geloeschter_account_' . $user->getId() . '_' . $user->getEmail());
$user->setFreigeschaltet(0);
$entityManager->persist($user);
$entityManager->flush();
$returnData["error"] = false;
}
}
return new JsonResponse($returnData);
}
#[Route('/mein_profil/updates/laden', name: 'user_profil_mein_profil_updates_laden')]
public function profilUpdatesLaden(UserRepository $userRepository, EntityManagerInterface $entityManager): Response
{
$user = $userRepository->findOneBy(['id' => $this->getUser()->getId()]);
if ($user->getCampusUpdate() != $_ENV["CAMPUS_UPDATE_VERSION"]) {
$user->setCampusUpdate($_ENV["CAMPUS_UPDATE_VERSION"]);
$entityManager->persist($user);
$entityManager->flush();
}
return $this->render('user/profil/profil_info_updates.html.twig', [
]);
}
#[Route('/mein_profil/kalender/laden', name: 'user_profil_mein_profil_kalender_laden')]
public function profilKalenderLaden(): Response
{
return $this->render('user/profil/profil_info_kalender.html.twig', [
]);
}
#[Route('/mein_profil/bearbeiten/laden', name: 'user_profil_mein_profil_bearbeiten_laden')]
public function profilBearbeitenLaden(): Response
{
return $this->render('user/profil/profil_info_bearbeiten.html.twig', [
]);
}
#[Route('/mein_profil/dashboard/laden', name: 'user_profil_mein_profil_dashboard_laden')]
public function profilDashboardLaden(FirmenInterneSchulungenZertifikatRepository $zertifikatRepository,
BuchungenRepository $buchungenRepository,
GutscheincodesRepository $gutscheincodesRepository): Response
{
return $this->render('user/profil/profil_info_dashboard.html.twig', [
'gutscheine' => $gutscheincodesRepository->findBy(['an_user_id' => $this->getUser()->getId(), 'firma' => null]),
'zertifikate' => $zertifikatRepository->findBy(['user' => $this->getUser()], ['datum' => 'DESC']),
'offeneBuchungen' => $buchungenRepository->findBy(['user' => $this->getUser(), 'bezahlstatus' => 0]),
]);
}
#[Route('/mein_profil/gutscheine/laden', name: 'user_profil_mein_profil_gutscheine_laden')]
public function user_profil_mein_profil_gutscheine_laden(GutscheincodesRepository $gutscheincodesRepository): Response
{
return $this->render('user/profil/profil_info_gutscheine.html.twig', [
'gutscheine' => $gutscheincodesRepository->findBy(['an_user_id' => $this->getUser()->getId(), 'firma' => null]),
]);
}
#[Route('/mein_profil/favoriten/laden', name: 'user_profil_mein_profil_favoriten_laden')]
public function profilFavoritenLaden(FirmenprofilRepository $firmenprofilRepository,
UserFavoritenRepository $userFavoritenRepository): Response
{
return $this->render('user/profil/profil_info_favoriten.html.twig', [
'favoriten' => $userFavoritenRepository->findBy(['user_id' => $this->getUser()->getId()]),
'firmenprofile' => $firmenprofilRepository->findAll(),
]);
}
#[Route('/mein_profil/beobachtungen/laden', name: 'user_profil_mein_profil_beobachtungen_laden')]
public function profilBeobachtungenLaden(FirmenprofilRepository $firmenprofilRepository,
SchulungBeobachtenRepository $schulungBeobachtenRepository): Response
{
return $this->render('user/profil/profil_info_beobachtungen.html.twig', [
'beobachtungen' => $schulungBeobachtenRepository->findBy(['user' => $this->getUser()]),
'firmenprofile' => $firmenprofilRepository->findAll(),
]);
}
#[Route('/mein_profil/zertifikate/laden', name: 'user_profil_mein_profil_zertifikate_laden')]
public function profilZertifikateLaden(FirmenInterneSchulungenZertifikatRepository $zertifikatRepository,
FirmenInterneSchulungenRepository $firmenInterneSchulungenRepository): Response
{
$zertifikate = $zertifikatRepository->findBy(['user' => $this->getUser()], ['datum' => 'DESC']);
$musterIDs = [];
$schulungsIDs = [];
foreach ($zertifikate as $zertifikat) {
$schulungsIDs[] = $zertifikat->getFirmenSchulungId();
}
$schulungsIDs = array_unique($schulungsIDs);
$schulungen = $firmenInterneSchulungenRepository->findBy(['id' => $schulungsIDs, 'status' => 1]);
foreach ($zertifikate as $zertifikat) {
foreach ($schulungen as $schulung) {
if ($schulung->getId() == $zertifikat->getFirmenSchulungId()) {
$tmpMuster['id'] = $zertifikat->getId();
$tmpMuster['datum'] = $schulung->getStatusDatum()->format('d.m.Y');
$musterIDs[] = $tmpMuster;
}
}
}
return $this->render('user/profil/profil_info_zertifikate.html.twig', [
'zertifikate' => $zertifikate,
'musterIDs' => $musterIDs,
]);
}
#[Route('/mein_profil/buchungen/laden', name: 'user_profil_mein_profil_buchungen_laden')]
public function profilBuchungenLaden(BuchungenRepository $buchungenRepository,
BuchungenSeminareTeilnehmerRepository $buchungenSeminareTeilnehmerRepository,
SchulungsArtRepository $schulungsArtRepository,
UserNotificationRepository $notificationRepository,
EntityManagerInterface $entityManager): Response
{
$notifications = $notificationRepository->findBy(['type' => 9, 'user' => $this->getUser()->getId()]);
foreach ($notifications as $notification) {
$entityManager->remove($notification);
$entityManager->flush();
}
$buchungenIDs = [];
$selbstGebuchte = $buchungenRepository->findBy(['user' => $this->getUser()->getId()]);
foreach ($selbstGebuchte as $selbstGebucht) {
$buchungenIDs[] = $selbstGebucht->getId();
}
$seminareTeilnehmer = $buchungenSeminareTeilnehmerRepository->findBy(['user' => $this->getUser()->getId()]);
foreach ($seminareTeilnehmer as $teilnehmer) {
if ($teilnehmer->getBuchungenSeminar()->getBuchung()->getBezahlstatus() > 10) {
$buchungenIDs[] = $teilnehmer->getBuchungenSeminar()->getBuchung()->getId();
}
}
$buchungenIDs = array_unique($buchungenIDs);
$buchungen = $buchungenRepository->findBy(['id' => $buchungenIDs], ['datum_bestellung' => 'DESC']);
return $this->render('user/profil/profil_info_buchungen.html.twig', [
'buchungen' => $buchungen,
'schulungsarten' => $schulungsArtRepository->findAll(),
]);
}
#[Route('/mein_profil/warenkorb/laden', name: 'user_profil_mein_profil_warenkorb_laden')]
public function profilWarenkorbLaden(BuchungenRepository $buchungenRepository,
SchulungsArtRepository $schulungsArtRepository): Response
{
return $this->render('user/profil/profil_info_warenkorb.html.twig', [
'buchungen' => $buchungenRepository->findBy(['bezahlstatus' => 0, 'user' => $this->getUser()->getId()], ['datum_bestellung' => 'DESC']),
'schulungsarten' => $schulungsArtRepository->findAll(),
]);
}
#[Route('/mein_profil/buchungen/rechnungen/download/{id}', name: 'user_profil_mein_profil_buchungen_rechnungen_download')]
public function user_profil_mein_profil_buchungen_rechnungen_download($id,
BuchungenRechnungenRepository $buchungenRechnungenRepository,
HttpClientInterface $httpClient): Response
{
$buchungenRechnungen = $buchungenRechnungenRepository->findOneBy(['id' => $id]);
if ($buchungenRechnungen->getBuchung()->getUser()->getId() == $this->getUser()->getId() && $buchungenRechnungen->getBuchung()->getBezahlstatus() == 41) {
$rechnung = $httpClient->request('GET', $_ENV['WECLAPP_API_URL'] . 'salesInvoice/id/' . $buchungenRechnungen->getWeclappRechnungsId(), [
'headers' => [
'Content-Type' => 'application/json',
'AuthenticationToken' => $_ENV['WECLAPP_API_KEY']
],
])->toArray(false);
$rechnungResponse = $httpClient->request("GET", $_ENV['WECLAPP_API_URL'] . 'salesInvoice/id/' . $buchungenRechnungen->getWeclappRechnungsId() . '/downloadLatestSalesInvoicePdf', [
'headers' => [
'Content-Type' => 'application/json',
'AuthenticationToken' => $_ENV['WECLAPP_API_KEY']
],
]);
if ($rechnungResponse->getStatusCode() == 200) {
$outputStream = fopen('php://memory', 'rw+');
foreach ($httpClient->stream($rechnungResponse) as $chunk) {
fwrite($outputStream, $chunk->getContent());
}
} else {
// TODO: FEHLER
dd("Es ist ein FEHLER aufgetreten");
}
$response = new Response();
$response->headers->set('Content-Type', 'application/pdf');
$response->headers->set('Content-Disposition', 'attachment; filename="campus-' . $rechnung['invoiceNumber'] . '.pdf"');
$response->setContent(stream_get_contents($outputStream, -1, 0));
return $response;
} else {
return $this->redirectToRoute('user_start');
}
}
#[Route('/mein_profil/termine/laden', name: 'user_profil_mein_profil_termine_laden')]
public function profilTermineLaden(BuchungenSeminareTeilnehmerRepository $buchungenSeminareTeilnehmerRepository,
SchulungsArtRepository $schulungsArtRepository,
SchulungsTermineRepository $schulungsTermineRepository): Response
{
$gebuchteTermine = $buchungenSeminareTeilnehmerRepository->findBy(['user' => $this->getUser()->getId(), 'status' => 0]);
$terminIDs = [];
foreach ($gebuchteTermine as $gebuchterTermin) {
$schulungsart = $gebuchterTermin->getBuchungenSeminar()->getTermin()->getSchulung()->getSchulungsart()->getId();
if ($schulungsart == 1 or $schulungsart == 4) {
foreach ($gebuchterTermin->getBuchungenSeminar()->getTermin()->getSchulung()->getSchulungstermine() as $gefundenTermin) {
$terminIDs[] = $gefundenTermin->getId();
}
} else {
$terminIDs[] = $gebuchterTermin->getBuchungenSeminar()->getTermin()->getId();
}
}
$termine = $schulungsTermineRepository->findBy(['id' => $terminIDs], ['von' => 'ASC']);
return $this->render('user/profil/profil_info_termine.html.twig', [
'gebuchteTermine' => $gebuchteTermine,
'termine' => $termine,
'schulungsarten' => $schulungsArtRepository->findAll(),
]);
}
#[Route('/mein_profil/benachrichtigungen/laden', name: 'user_profil_mein_profil_benachrichtigungen_laden')]
public function profilBenachrichtigungenLaden(FirebaseNotificationRepository $firebaseNotificationRepository): Response
{
$geraete = $firebaseNotificationRepository->findBy(['user' => $this->getUser()]);
return $this->render('user/profil/profil_info_benachrichtigungen.html.twig', [
'geraete' => $geraete,
'lable' => $this->getLableInternerBereich(),
]);
}
#[Route('/mein_profil/benachrichtigungen/geraetename/laden/{id}', name: 'user_profil_mein_profil_benachrichtigungen_geraetename_laden')]
public function benachrichtigungen_geraetename_laden($id,
FirebaseNotificationRepository $firebaseNotificationRepository): Response
{
$geraet = $firebaseNotificationRepository->findOneBy(['user' => $this->getUser(), 'id' => $id]);
return $this->render('user/profil/profil_info_benachrichtigungen_geraetename.html.twig', [
'geraet' => $geraet,
]);
}
#[Route('/mein_profil/benachrichtigungen/geraetename/speichern/{id}', name: 'user_profil_mein_profil_benachrichtigungen_geraetename_speichern')]
public function benachrichtigungen_geraetename_speichern(Request $request, $id, EntityManagerInterface $entityManager,
FirebaseNotificationRepository $firebaseNotificationRepository): Response
{
$geraet = $firebaseNotificationRepository->findOneBy(['user' => $this->getUser(), 'id' => $id]);
$returnData["error"] = true;
$returnData["geraeteID"] = $id;
$returnData["geraetename"] = '';
if ($geraet != null) {
$name = $request->get('name');
if (strlen($name) > 0) {
$geraet->setName($name);
$returnData["geraetename"] = $name;
} else {
$geraet->setName(null);
$deviceInformation = json_decode($geraet->getDeviceInformation(), true);
$returnData["geraetename"] = $deviceInformation['model'];
}
$entityManager->persist($geraet);
$entityManager->flush();
$returnData["error"] = false;
}
return new JsonResponse($returnData);
}
#[Route('/mein_profil/benachrichtigungen/test_notification/{id}', name: 'user_profil_mein_profil_test_notification')]
public function test_notification($id,
FirebaseNotificationRepository $firebaseNotificationRepository,
UserRepository $userRepository,
Messaging $messaging,
FirebaseController $firebaseController): Response
{
$geraet = $firebaseNotificationRepository->findBy(['id' => $id, 'user' => $this->getUser()]);
if ($geraet != null) {
$userIDs = [];
$userIDs[] = $this->getUser()->getId();
$notificationEmpfaenger = $userIDs;
$notificationTitle = 'handwerkXcampus Test-Notification';
$notificationVorschau = 'Hallo ' . $this->getUser()->getUserProfil()->getVorname() . ', Test bestanden.';
$notificationBody = 'Dies ist eine Testnotification. Der Test war erfolgreich';
$notificationLink = $_ENV["WEBSITE_URL"] . '/user/profil/mein_profil/info/benachrichtigungen';
$firebaseController->firebaseNotificationSenden('Test', $notificationEmpfaenger, $notificationTitle, $notificationVorschau, $notificationBody, $notificationLink, $userRepository, $firebaseNotificationRepository, $messaging, $id);
}
$returnData["error"] = false;
return new JsonResponse($returnData);
}
#[Route('/mein_profil/benachrichtigungen/pushnachrichten_speichern', name: 'user_profil_mein_profil_app_pushnachrichten_speichern')]
public function user_profil_mein_profil_app_pushnachrichten_speichern(Request $request,
FirebaseNotificationRepository $firebaseNotificationRepository,
EntityManagerInterface $entityManager): Response
{
$daten = null;
$geraeteId = $request->get('geraetId');
$art = $request->get('art');
$value = $request->get('value');
$geraet = $firebaseNotificationRepository->findOneBy(['user' => $this->getUser(), 'id' => $geraeteId]);
if ($geraet != null) {
if ($geraet->getEinstellungen() != null) {
$daten = json_decode($geraet->getEinstellungen(), true);
}
$daten[$art] = $value;
$geraet->setEinstellungen(json_encode($daten));
$entityManager->persist($geraet);
$entityManager->flush();
}
$returnData["error"] = false;
return new JsonResponse($returnData);
}
#[Route('/mein_profil/benachrichtigungen/emailnachrichten_speichern', name: 'user_profil_mein_profil_emailnachrichten_speichern')]
public function user_profil_mein_profil_emailnachrichten_speichern(Request $request, UserRepository $userRepository,
EntityManagerInterface $entityManager): Response
{
$daten = null;
$art = $request->get('art');
$value = $request->get('value');
$user = $userRepository->findOneBy(['id' => $this->getUser()]);
if ($user->getEinstellungen() != null) {
$daten = json_decode($user->getEinstellungen(), true);
}
$daten[$art] = $value;
$user->setEinstellungen(json_encode($daten));
$entityManager->persist($user);
$entityManager->flush();
$returnData["error"] = false;
return new JsonResponse($returnData);
}
#[Route('/mein_profil/benachrichtigungen/geraet_entfernen/{id}', name: 'user_profil_mein_profil_geraet_entfernen')]
public function user_profil_mein_profil_geraet_entfernen($id, FirebaseNotificationRepository $firebaseNotificationRepository, EntityManagerInterface $entityManager): Response
{
$geraet = $firebaseNotificationRepository->findOneBy(['id' => $id, 'user' => $this->getUser()->getId()]);
$returnData["error"] = false;
if ($geraet != null) {
$entityManager->remove($geraet);
$entityManager->flush();
} else {
$returnData["error"] = true;
}
return new JsonResponse($returnData);
}
#[Route('/mein_profil/intranet/laden', name: 'user_profil_mein_profil_intranet_laden')]
public function profilIntranetLaden(CelseoIntranetVerbindungRepository $celseoIntranetVerbindungRepository,
AllgemeineFunktionenController $allgemeineFunktionenController): Response
{
$verbindungscode = null;
$verbindungscodeEnde = null;
$tmpVerbindungscode = $celseoIntranetVerbindungRepository->findVerbindungsCode($this->getUser()->getId());
if (count($tmpVerbindungscode) > 0) {
$verbindungscode = $tmpVerbindungscode[0]->getGuid();
$datumClone = clone $tmpVerbindungscode[0]->getDatum();
$verbindungscodeEnde = $datumClone->modify('+30 minutes');
}
$jsonData['campusId'] = $this->getUser()->getId();
$ergebnis = false;
$accounts = [];
$intranetResponse = $allgemeineFunktionenController->jsonDatenSendenAnIntranet('intranet_user_verbindungen/auslesen', $jsonData);
if ($intranetResponse['ergebnis']) {
$ergebnis = true;
$accounts = $intranetResponse['accounts'];
}
return $this->render('user/profil/profil_info_intranet.html.twig', [
'ergebnis' => $ergebnis,
'accounts' => $accounts,
'verbindungscode' => $verbindungscode,
'verbindungscodeEnde' => $verbindungscodeEnde,
]);
}
#[Route('/mein_profil/intranet/verbindungscode', name: 'user_profil_mein_profil_intranet_verbindungscode')]
public function user_profil_mein_profil_intranet_verbindungscode(CelseoIntranetVerbindungRepository $celseoIntranetVerbindungRepository,
EntityManagerInterface $entityManager): Response
{
$returnData["error"] = false;
$datum = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
$verbindungscodes = $celseoIntranetVerbindungRepository->findBy(['user_id' => $this->getUser()->getId(), 'intranet_user_id' => 0]);
foreach ($verbindungscodes as $verbindungscode) {
$entityManager->remove($verbindungscode);
$entityManager->flush();
}
$tmpGuid = Uuid::v4();
$tmpGuidExplode = explode('-', $tmpGuid);
$guid = $tmpGuidExplode[1] . '-' . $tmpGuidExplode[2] . '-' . $tmpGuidExplode[3] . '-' . $this->getUser()->getId();
$verbindungscode = new CelseoIntranetVerbindung();
$verbindungscode->setUserId($this->getUser()->getId());
$verbindungscode->setGuid($guid);
$verbindungscode->setDatum($datum);
$verbindungscode->setIntranetUserId(0);
$entityManager->persist($verbindungscode);
$entityManager->flush();
return new JsonResponse($returnData);
}
#[Route('/mein_profil/intranet/login/{intranetAnsprechpartnerId}', name: 'user_profil_mein_profil_intranet_login')]
public function user_profil_mein_profil_intranet_login($intranetAnsprechpartnerId,
CelseoIntranetVerbindungRepository $celseoIntranetVerbindungRepository,
AllgemeineFunktionenController $allgemeineFunktionenController,
EntityManagerInterface $entityManager): Response
{
$returnData["error"] = true;
$returnData["link"] = $_ENV["CELSEO_INTRANET_URL"];
$datum = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
$verbindungscodes = $celseoIntranetVerbindungRepository->findBy(['user_id' => $this->getUser()->getId()]);
foreach ($verbindungscodes as $verbindungscode) {
if ($verbindungscode->getIntranetUserId() != 0) {
$entityManager->remove($verbindungscode);
$entityManager->flush();
}
}
$jsonData['campusId'] = $this->getUser()->getId();
$intranetResponse = $allgemeineFunktionenController->jsonDatenSendenAnIntranet('intranet_user_verbindungen/auslesen', $jsonData);
if ($intranetResponse['ergebnis']) {
foreach ($intranetResponse['accounts'] as $account) {
if ($account['intranetAnsprechpartnerId'] == $intranetAnsprechpartnerId && $account['campusZumIntranetLogin'] == 1) {
$returnData["error"] = false;
$tmpGuid = Uuid::v4();
$guid = str_replace('-', '', $tmpGuid);
$verbindungscode = new CelseoIntranetVerbindung();
$verbindungscode->setUserId($this->getUser()->getId());
$verbindungscode->setGuid($guid);
$verbindungscode->setDatum($datum);
$verbindungscode->setIntranetUserId($intranetAnsprechpartnerId);
$entityManager->persist($verbindungscode);
$entityManager->flush();
$returnData["link"] = $_ENV["CELSEO_INTRANET_DEMO_URL"] . 'campus-login?AP=' . $intranetAnsprechpartnerId . '&guid=' . $guid;
break;
}
}
}
return new JsonResponse($returnData);
}
#[Route('/mein_profil/intranet/campus_verbindung_entfernen/{intranetAnsprechpartnerId}', name: 'user_profil_mein_profil_intranet_campus_verbindung_entfernen')]
public function user_profil_mein_profil_intranet_campus_verbindung_entfernen($intranetAnsprechpartnerId,
AllgemeineFunktionenController $allgemeineFunktionenController): Response
{
$jsonData['campusId'] = $this->getUser()->getId();
$jsonData['apId'] = $intranetAnsprechpartnerId;
$intranetResponse = $allgemeineFunktionenController->jsonDatenSendenAnIntranet('intranet_user_verbindung/loeschen', $jsonData);
$returnData["ergebnis"] = $intranetResponse['ergebnis'];
return new JsonResponse($returnData);
}
#[Route('/mein_profil/mailadressen/laden', name: 'user_profil_mein_profil_mailadressen_laden')]
public function profilMailadressenLaden(): Response
{
return $this->render('user/profil/profil_info_mailadressen.html.twig', [
]);
}
#[Route('/mein_profil/mailadressen/mail/speichern', name: 'user_profil_mein_profil_mailadressen_mail_speichern')]
public function profilMailadressenMailSpeichern(Request $request,
UserRepository $userRepository,
MailerInterface $mailer,
UrlGeneratorInterface $urlGenerator,
SecurityController $securityController,
EntityManagerInterface $entityManager): Response
{
$userKontrolle = $userRepository->findBy(['email' => $request->get('neue_mailadresse')]);
$returnData["error"] = false;
if ($userKontrolle == null) {
$user = $userRepository->findOneBy(['id' => $this->getUser()->getId()]);
$user->setAenderungsindex(1);
$user->setAenderung($request->get('neue_mailadresse'));
$user->setGuid(Uuid::v4());
$entityManager->persist($user);
$entityManager->flush();
$securityController->sendNeueMailadresseEmail($user, $urlGenerator, $mailer);
} else {
$returnData["error"] = true;
}
return new JsonResponse($returnData);
}
#[Route('/mein_profil/mailadressen/mail/speichern/abbrechen', name: 'user_profil_mein_profil_mailadressen_mail_speichern_abbrechen')]
public function profilMailadressenMailSpeichernAbbrechen(UserRepository $userRepository,
EntityManagerInterface $entityManager): Response
{
$user = $userRepository->findOneBy(['id' => $this->getUser()->getId()]);
$user->setAenderungsindex(null);
$user->setAenderung(null);
$user->setGuid(null);
$entityManager->persist($user);
$entityManager->flush();
$returnData["error"] = false;
return new JsonResponse($returnData);
}
#[Route('/mein_profil/mailadressen/versandmail/speichern', name: 'user_profil_mein_profil_mailadressen_versandmail_speichern')]
public function profilMailadressenVersandmailSpeichern(Request $request,
UserRepository $userRepository,
MailerInterface $mailer,
UrlGeneratorInterface $urlGenerator,
SecurityController $securityController,
EntityManagerInterface $entityManager): Response
{
$neueMail = $request->get('neue_versandmailadresse');
$user = $userRepository->findOneBy(['id' => $this->getUser()->getId()]);
$returnData["error"] = false;
if ($user->getEmail() != $neueMail) {
$user->setAenderungsindex(2);
$user->setAenderung($neueMail);
$user->setGuid(Uuid::v4());
$entityManager->persist($user);
$entityManager->flush();
$securityController->sendNeueVersandmailadresseEmail($user, $urlGenerator, $mailer);
} else {
$returnData["error"] = true;
$userProfil = $user->getUserProfil();
$userProfil->setMailversand($neueMail);
$entityManager->persist($userProfil);
$entityManager->flush();
}
return new JsonResponse($returnData);
}
#[Route('/mein_profil/mailadressen/anzeigemail/speichern', name: 'user_profil_mein_profil_mailadressen_anzeigemail_speichern')]
public function profilMailadressenAnzeigeMailSpeichern(Request $request,
UserProfilRepository $userProfilRepository,
EntityManagerInterface $entityManager): Response
{
$emailAnzeigen = null;
if (strlen($request->get('email_anzeigen')) > 1) {
$emailAnzeigen = $this->getUser()->getFirmenprofil()->getId() . ',' . $request->get('email_anzeigen');
}
$userprofil = $userProfilRepository->findOneBy(['user' => $this->getUser()]);
$userprofil->setEmailAnzeigen($emailAnzeigen);
$entityManager->persist($userprofil);
$entityManager->flush();
$returnData["error"] = false;
return new JsonResponse($returnData);
}
#[Route('/mein_profil/ondemand/laden', name: 'user_profil_mein_profil_ondemand_laden')]
public function profilOndemandLaden(BuchungenSeminareTeilnehmerRepository $buchungenSeminareTeilnehmerRepository): Response
{
return $this->render('user/profil/profil_info_on_demand.html.twig', [
'bstTermine' => $buchungenSeminareTeilnehmerRepository->findBy(['user' => $this->getUser()->getId()]),
]);
}
#[Route('/mein_profil/ondemand/ansehen/{bstId}', name: 'user_profil_mein_profil_ondemand_ansehen')]
public function user_profil_mein_profil_ondemand_ansehen($bstId, BuchungenSeminareTeilnehmerRepository $buchungenSeminareTeilnehmerRepository): Response
{
return $this->render('user/profil/profil_info_on_demand_ansehen.html.twig', [
'bstTermin' => $buchungenSeminareTeilnehmerRepository->findOneBy(['id' => $bstId, 'user' => $this->getUser()->getId()]),
]);
}
#[Route('/mein_profil/firma', name: 'user_profil_mein_profil_firma_laden', methods: ['GET'])]
public function profilFirma(FirmenMitgliederanfrageRepository $firmenMitgliederanfrageRepository,
UserNotificationRepository $notificationRepository,
AdminSecurityRoleRepository $adminSecurityRoleRepository,
EntityManagerInterface $entityManager): Response
{
$anfrage = 0;
$firmenprofil = null;
$firmenid = $this->getUser()?->getFirmenProfil()?->getId();
if ($firmenid == null) {
$userFirmenanfrage = $firmenMitgliederanfrageRepository->findOneBy(['user' => $this->getUser()->getId()]);
if ($userFirmenanfrage != null) {
$firmenprofil = $userFirmenanfrage->getFirma();
$anfrage = 1;
}
} else {
$firmenprofil = $this->getUser()->getFirmenProfil();
}
$notifications = $notificationRepository->findBy(['type' => 4, 'user' => $this->getUser()->getId()]);
foreach ($notifications as $notification) {
$entityManager->remove($notification);
$entityManager->flush();
}
return $this->render('user/profil/profil_firmenbewerbung.html.twig', [
'anfrage' => $anfrage,
'firma' => $firmenprofil,
'adminroles' => $adminSecurityRoleRepository->findAll(),
]);
}
#[Route('/mein_profil/firmencode/senden', name: 'user_profil_firmencode_senden')]
public function userProfilFirmencodeSenden(Request $request,
EntityManagerInterface $entityManager,
FirmenprofilRepository $firmenprofilRepository,
UserRepository $userRepository): Response
{
$firmencode = $request->get('firmencode');
$firmaGefunden = null;
if ($firmencode != null) {
if (str_starts_with($firmencode, "C-")) {
$code = explode('-', $firmencode, 3);
if (count($code) == 3) {
if (is_numeric($code[1])) {
$firmaGefunden = $firmenprofilRepository->findOneBy(['id' => (int)$code[1], 'firmencode' => $code[2]]);
}
}
}
}
if ($firmaGefunden != null) {
$userProfil = $userRepository->findOneBy(['id' => $this->getUser()->getId()]);
$beiFirmaAnmelden = new FirmenMitgliederanfrage();
$beiFirmaAnmelden->setUser($userProfil);
$beiFirmaAnmelden->setDatum(new \DateTime('now', new \DateTimeZone('Europe/Berlin')));
$beiFirmaAnmelden->setFirma($firmaGefunden);
$entityManager->persist($beiFirmaAnmelden);
$entityManager->flush();
$alleFirmenmitglieder = $userRepository->findBy(['firmen_profil' => $firmaGefunden]);
foreach ($alleFirmenmitglieder as $firmenmitglied) {
if (in_array("ROLE_FIRMA_ADMIN_MITGLIEDER_RECHTE", $firmenmitglied->getRoles())) {
$neueNotification = new UserNotification();
$neueNotification->setUser($firmenmitglied);
$neueNotification->setVonUserId($this->getUser()->getId());
$neueNotification->setUserName($this->getUser()->getuserProfil()->getNachname() . ' ' . $this->getUser()->getuserProfil()->getVorname());
$neueNotification->setType(3);
$neueNotification->setDatum(new \DateTime('now', new \DateTimeZone('Europe/Berlin')));
$neueNotification->setGelesen(0);
$neueNotification->setText('Anfrage Firmenmitglied');
$neueNotification->setLink('admin_start_neue_mitglieder');
$entityManager->persist($neueNotification);
$entityManager->flush();
}
}
$returnData["error"] = false;
return new JsonResponse($returnData);
}
$returnData["error"] = true;
return new JsonResponse($returnData);
}
#[Route('/mein_profil/firmencode/abbrechen/{firmenId}', name: 'user_profil_firmencode_abbrechen')]
public function userProfilFirmencodeAbbrechen(Request $request, $firmenId, EntityManagerInterface $entityManager,
FirmenDateimanagerRepository $firmenDateimanagerRepository,
FirmenMitgliederanfrageRepository $firmenMitgliederanfrageRepository,
FirmenprofilRepository $firmenprofilRepository,
MailsWarteschleifeController $mailsWarteschleifeController,
UrlGeneratorInterface $urlGenerator,
UserFavoritenRepository $userFavoritenRepository,
TokenStorageInterface $tokenStorage,
UserRepository $userRepository,
UserRolesGekauftRepository $userRolesGekauftRepository,
UserNotificationRepository $notificationRepository): Response
{
$userId = $this->getUser()->getId();
$firmaAnfrage = $firmenMitgliederanfrageRepository->findOneBy(['user' => $userId, 'firma' => $firmenId]);
if ($firmaAnfrage != null) {
$entityManager->remove($firmaAnfrage);
$entityManager->flush();
$notifications = $notificationRepository->findBy(['von_user_id' => $userId, 'type' => 3]);
foreach ($notifications as $notification) {
$entityManager->remove($notification);
$entityManager->flush();
}
}
$user = $userRepository->findOneBy(['id' => $userId, 'firmen_profil' => $firmenId, 'firmen_profil_boss' => null]);
if ($user != null) {
$userRolesExtra = $userRolesGekauftRepository->findBy(['user' => $userId]);
$neueUserRoles = [];
$neueUserRoles[] = "ROLE_MITGLIED";
if ($userRolesExtra != null) {
foreach ($userRolesExtra as $userRoles) {
$neueUserRoles[] = $userRoles->getRole();
}
}
$firma = $firmenprofilRepository->findOneBy(['id' => $firmenId]);
$alleFirmenmitglieder = $userRepository->findBy(['firmen_profil' => $firma]);
foreach ($alleFirmenmitglieder as $firmenmitglied) {
if (in_array("ROLE_FIRMA_ADMIN_MITGLIEDER_RECHTE", $firmenmitglied->getRoles()) && $firmenmitglied->getId() != $userId) {
$emailSenden = 1;
if ($firmenmitglied->getEinstellungen() != null) {
$einstellungen = json_decode($firmenmitglied->getEinstellungen(), true);
if (isset($einstellungen['hatFirmaVerlassen'])) {
$emailSenden = (int)$einstellungen['hatFirmaVerlassen'];
}
}
if ($emailSenden == 1) {
$optinLink = $urlGenerator->generate('admin_firmenadmin_start', [], UrlGeneratorInterface::ABSOLUTE_URL);
$optinLink2 = $urlGenerator->generate('user_profil_mein_profil_info', ['seite' => 'benachrichtigungen'], UrlGeneratorInterface::ABSOLUTE_URL);
$mailsWarteschleifeController->insertMail([
'preheader' => 'handwerkXcampus Mitarbeiter*in hat Firmenverbindung gelöscht',
'vorname' => $firmenmitglied->getUserProfil()->getVorname(),
'nachname' => $firmenmitglied->getUserProfil()->getNachname(),
'vornameSender' => $user->getuserProfil()->getVorname(),
'nachnameSender' => $user->getuserProfil()->getNachname(),
'firmenposition' => $user->getuserProfil()->getFirmenposition(),
'optinLink' => $optinLink,
'optinLink2' => $optinLink2,
], $_ENV["MAILER_SENDER_NO_REPLY"],
$firmenmitglied->getuserProfil()->getMailversand(),
'handwerkXcampus Mitarbeiter*in hat Firmenverbindung gelöscht',
'emails/benachrichtigung_firma_verlassen.html.twig',
'VonFirmaGegangen', 0,
$firmenmitglied);
}
}
}
//Todo: Chat Upload Kontrolle ob löschen
foreach ($user->getNotdienste() as $notdienst) {
$notdienst->setUser(null);
$notdienst->setVorname($user->getUserProfil()->getVorname());
$notdienst->setNachname($user->getUserProfil()->getNachname());
if ($notdienst->getErsatzUser() == null) {
$notdienst->setPushNotificationDatum(null);
}
$entityManager->persist($notdienst);
}
foreach ($user->getNotdiensteErsatz() as $notdienst) {
$notdienst->setErsatzUser(null);
$notdienst->setErsatzVorname($user->getUserProfil()->getVorname());
$notdienst->setErsatzNachname($user->getUserProfil()->getNachname());
$notdienst->setPushNotificationDatum(null);
$entityManager->persist($notdienst);
}
$entityManager->flush();
$userDateien = $firmenDateimanagerRepository->findBy(['user_id' => $user->getId()]);
foreach ($userDateien as $datei) {
$serverFilePath = $this->getParameter('admin_ordner') . '/dateimanager/' . $user->getFirmenProfil()->getId() . '/' . $datei->getSpeichername();
$fileSystem = new Filesystem();
$fileSystem->remove($serverFilePath);
}
$user->setFirmenProfil(null);
$user->setNeueRoles(null);
$user->setRoles($neueUserRoles);
$entityManager->persist($user);
$entityManager->flush();
//Benutzer neu einloggen
$loginController = new LoginController($userFavoritenRepository);
$loginController->loginUser($user, $tokenStorage, $request);
}
$returnData["error"] = false;
return new JsonResponse($returnData);
}
#[Route('/mein_profil/rechte/aktualisieren', name: 'user_profil_mein_profil_rechte_aktualisieren')]
public function user_profil_rechte_aktualisieren(EntityManagerInterface $entityManager,
UserRepository $userRepository,
UserFavoritenRepository $userFavoritenRepository,
TokenStorageInterface $tokenStorage,
Request $request): Response
{
$user = $userRepository->findOneBy(['id' => $this->getUser()->getId()]);
if ($user->getNeueRoles() != null) {
$userNeueRoles = $user->getNeueRoles();
$user->setRoles($userNeueRoles);
$user->setNeueRoles(null);
$entityManager->persist($user);
$entityManager->flush();
//Benutzer neu einloggen
$loginController = new LoginController($userFavoritenRepository);
$loginController->loginUser($user, $tokenStorage, $request);
}
$returnData["error"] = false;
return new JsonResponse($returnData);
}
#[Route('/mein_profil/bearbeiten/speichern', name: 'user_profil_mein_profil_bearbeiten_speichern')]
public function userProfilSpeichern(Request $request,
UserProfilRepository $userProfilRepository,
DozentRepository $dozentRepository,
EntityManagerInterface $entityManager,
GoogleMapsController $googleMapsController,
HttpClientInterface $httpClient): Response
{
$id = $this->getUser()->getId();
$userProfil = $userProfilRepository->findOneBy(['user' => $id]);
$dozent = $dozentRepository->findOneBy(['user' => $id]);
if (strlen($request->get('plz'))) {
$adresse = $request->get('plz');
if (strlen($request->get('ort'))) {
$adresse = $adresse . ' ' . $request->get('ort');
}
if (strlen($request->get('strasse'))) {
$adresse = $adresse . ' ' . $request->get('strasse');
}
$ergebnis = $googleMapsController->googleMapsKoordinatenSuchen($adresse, $httpClient);
if (count($ergebnis) > 0) {
$userProfil->setGoogleLat($ergebnis[0]['geometry']['location']['lat'] . '');
$userProfil->setGoogleLen($ergebnis[0]['geometry']['location']['lng'] . '');
}
} else {
$userProfil->setGoogleLat(null);
$userProfil->setGoogleLen(null);
}
if ($request->get('geburtsdatum') == -1) {
$userProfil->setGeburtsdatum(null);
} else {
$userProfil->setGeburtsdatum(new \DateTime($request->get('geburtsdatum')));
}
$userProfil->setVorname($request->get('vorname'));
$userProfil->setNachname($request->get('nachname'));
$userProfil->setStrasse($request->get('strasse'));
$userProfil->setPlz($request->get('plz'));
$userProfil->setOrt($request->get('ort'));
$userProfil->setTelefon($request->get('telefon'));
$userProfil->setMobil($request->get('mobil'));
$userProfil->setNewsletter($request->get('newsletter'));
$entityManager->persist($userProfil);
$entityManager->flush();
if ($request->get('dozent_anlegen') != '0' || $dozent != null) {
if ($request->get('dozent_anlegen') == '1' && $dozent == null) {
$dozent = new Dozent();
$dozent->setUser($userProfil->getUser());
}
$dozent->setTelefon($request->get('dozent_telefon'));
$dozent->setEmail($request->get('dozent_email'));
$dozent->setFacebook($request->get('dozent_facebook'));
$dozent->setInstagram($request->get('dozent_instagram'));
$dozent->setYoutube($request->get('dozent_youtube'));
$dozent->setVorstellungsvideo($request->get('dozent_vorstellungsvideo'));
$dozent->setBeschreibung($request->get('dozent_beschreibung'));
$entityManager->persist($dozent);
$entityManager->flush();
}
$returnData["fehlermeldung"] = false;
return new JsonResponse($returnData);
}
#[Route('/mein_profil/bearbeiten/upload', name: 'user_profil_mein_profil_bearbeiten_upload')]
public function schulungUpload(Request $request, SluggerInterface $slugger, UserProfilRepository $userProfilRepository): Response
{
$id = $this->getUser()->getId();
$returnData = [];
$returnData['files'] = [];
$returnData['files'][0] = [];
/* $doctrine = $this->getDoctrine()->getManager();
$userProfil = $userProfilRepository->findOneBy(['user' => $id]);*/
$uploadFile = $request->files->all()['files'][0];
$safeFilename = $slugger->slug($uploadFile->getClientOriginalName());
$newFilename = $safeFilename . '-' . md5(uniqid()) . '.' . $uploadFile->guessExtension();
$mimeType = $uploadFile->getMimeType();
if ($uploadFile->guessExtension() != 'jpg' && $uploadFile->guessExtension() != 'jpeg' && $uploadFile->guessExtension() != 'png') {
$returnData['files'][0]['error'] = 'Ungültige Datei';
return new JsonResponse($returnData);
}
try {
$filePath = $this->getParameter('user_ordner') . '/' . $id . '/profilbild_original/';
$fileSystem = new Filesystem();
$fileSystem->remove($filePath);
$uploadFile->move($this->getParameter('user_ordner') . '/' . $id . '/profilbild_original/', $newFilename);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
$returnData['files'][0]['error'] = 'Es ist ein Fehler beim Upload aufgetreten';
return new JsonResponse($returnData);
}
//$userProfil->setProfilbild($newFilename);
//$doctrine->persist($userProfil);
//$doctrine->flush();
$returnData['files'][0]['name'] = $newFilename;
$returnData['files'][0]['type'] = $mimeType;
$returnData['files'][0]['size'] = 0;
$returnData['files'][0]['thumbnailUrl'] = $this->generateUrl('user_profilbild_original');
return new JsonResponse($returnData);
}
#[Route('/mein_profil/bearbeiten/upload-cropped', name: 'user_profil_mein_profil_bearbeiten_upload_cropped')]
public function schulungUploadCropped(Request $request, SluggerInterface $slugger,
UserProfilRepository $userProfilRepository,
EntityManagerInterface $entityManager): Response
{
$id = $this->getUser()->getId();
$returnData = [];
$returnData['success'] = false;
$userProfil = $userProfilRepository->findOneBy(['user' => $id]);
$uploadFile = $request->files->all()['croppedImage'];
//$filename = md5(uniqid()) . '.png';
//$safeFilename = $slugger->slug($uploadFile->getClientOriginalName());
$filename = md5(uniqid()) . '.png';
if ($uploadFile->guessExtension() != 'png') {
$returnData['message'] = 'Ungültige Datei';
return new JsonResponse($returnData);
}
try {
$fileSystem = new Filesystem();
$filePath = $this->getParameter('user_ordner') . '/' . $id . '/profilbild/';
$fileSystem->remove($filePath);
$uploadFile->move($this->getParameter('user_ordner') . '/' . $id . '/profilbild/', $filename);
$filePath = $this->getParameter('user_ordner') . '/' . $id . '/profilbild_original/';
$fileSystem->remove($filePath);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
$returnData['message'] = 'Es ist ein Fehler beim Upload aufgetreten';
return new JsonResponse($returnData);
}
$userProfil->setProfilbild($filename);
$entityManager->persist($userProfil);
$entityManager->flush();
$returnData['success'] = true;
return new JsonResponse($returnData);
}
#[Route('/mein_profil/bearbeiten/profilbild_loeschen', name: 'user_profil_mein_profil_bearbeiten_profilbild_loeschen')]
public function user_profil_mein_profil_bearbeiten_profilbild_loeschen(UserProfilRepository $userProfilRepository,
EntityManagerInterface $entityManager): Response
{
$id = $this->getUser()->getId();
$returnData['error'] = false;
$userProfil = $userProfilRepository->findOneBy(['user' => $id]);
if ($userProfil != null) {
$userProfil->setProfilbild(null);
$entityManager->persist($userProfil);
$entityManager->flush();
try {
$fileSystem = new Filesystem();
$filePath = $this->getParameter('user_ordner') . '/' . $id . '/profilbild/';
$fileSystem->remove($filePath);
} catch (FileException $e) {
$returnData['message'] = 'Es ist ein Fehler beim Löschen aufgetreten';
return new JsonResponse($returnData);
}
}
return new JsonResponse($returnData);
}
// Bild einbinden aus dem var Ordner mit Berechtigungsabfrage
#[Route('/mein_profil/profilbild_original', name: 'user_profilbild_original')]
public function meinProfilbildOriginal(Request $request, UserProfilRepository $userProfilRepository): Response
{
$id = $this->getUser()->getId();
$folderPath = $this->getParameter('user_ordner') . '/' . $id . '/profilbild_original/';
$finder = new Finder();
$finder->files()->in($folderPath);
$filePath = null;
if ($finder->hasResults()) {
foreach ($finder as $file) {
$filePath = $file->getRealPath();
}
}
if ($filePath != null) {
return new BinaryFileResponse($filePath);
}
return new JsonResponse('File not found', 404);
}
#[Route('/mein_profil/zertifikat/interne_schulungen_download/{id}', name: 'user_zertifikat_interne_schulungen_download')]
public function user_zertifikat_interne_schulungen_download($id, FirmenInterneSchulungenZertifikatRepository $zertifikatRepository,
FirmenInterneSchulungenRepository $firmenInterneSchulungenRepository): Response
{
$zertifikat = $zertifikatRepository->findOneBy(['id' => $id, 'user' => $this->getUser()]);
$datum = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
$heuteUS = $datum->format("YmdHis");
if ($zertifikat != null) {
$filePath = $this->getParameter('zertifikat_ordner_user') . '/' . $this->getUser()->getId() . '/zertifikate/' . $id . '.pdf';
$schulung = $firmenInterneSchulungenRepository->findOneBy(['id' => $zertifikat->getFirmenSchulungId()]);
if ($schulung != null && $schulung->getStatus() == 1) {
$mpdf = new \Mpdf\Mpdf([
'mode' => 'utf-8',
'fontDir' => [
$this->getParameter('font_ordner'),
],
'fontdata' => [
'roboto' => [
'R' => 'Roboto-Light.ttf',
'B' => 'Roboto-Bold.ttf',
'I' => 'Roboto-Medium.ttf',
],
],
'default_font' => 'roboto'
]);
$mpdf->SetTitle('Zertifikat');
$mpdf->SetAuthor('CELSEO Service GmbH');
$mpdf->SetSubject($zertifikat->getCelseoSchulung()->getTitel());
$mpdf->SetKeywords($zertifikat->getCelseoSchulung()->getSchulungsbereich());
$pagecount = $mpdf->setSourceFile($filePath);
$tplIdx = $mpdf->importPage($pagecount);
$mpdf->useTemplate($tplIdx);
$mpdf->SetWatermarkText('MUSTERZERTIFIKAT');
$mpdf->watermarkTextAlpha = 0.1;
$mpdf->watermarkImageAlpha = 0.5;
$mpdf->showWatermarkText = true;
$mpdf->Output($heuteUS . '_Zertifikat.pdf', \Mpdf\Output\Destination::INLINE);
return new BinaryFileResponse($mpdf);
}
}
return new BinaryFileResponse($filePath);
}
// Bild einbinden aus dem var Ordner mit Berechtigungsabfrage
#[Route('/mein_profil/profilbild', name: 'user_profilbild')]
public function meinProfilbild(Request $request, UserProfilRepository $userProfilRepository): Response
{
$id = $this->getUser()->getId();
$userProfil = $userProfilRepository->findOneBy(['user' => $id]);
$filePath = $this->getParameter('user_ordner') . '/' . $id . '/profilbild/' . $userProfil->getProfilbild();
//return new JsonResponse("", 403);
return new BinaryFileResponse($filePath);
}
}