<?php
namespace App\Controller\basisController;
use App\Repository\ChatRepository;
use App\Repository\UserRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RequestStack;
class UserBasisController extends AbstractController
{
public $session;
public $userRepository;
public $chatRepository;
public function __construct(RequestStack $requestStack, UserRepository $userRepository, ChatRepository $chatRepository)
{
$this->session = $requestStack->getSession();
$this->session->start();
$this->session->set('lastUse', time());
$this->userRepository = $userRepository;
$this->chatRepository = $chatRepository;
}
public function getRechteTabellenzeileId($sichtbar, $zugriffsrechte, $alleFirmengruppen)
{
$idErlaubt = false;
$userId = $this->getUser()->getId();
if ($sichtbar != null) {
$rechte = json_decode($sichtbar, true);
if (count($rechte) == 0) {
$idErlaubt = true;
} else {
foreach ($rechte as $recht) {
if ($recht == $this->getUser()->getUserProfil()->getFirmenposition()) {
$idErlaubt = true;
}
foreach ($alleFirmengruppen as $firmengruppe) {
if ($firmengruppe->getId() == $recht) {
$firmengruppeUser = json_decode($firmengruppe->getGruppenMitarbeiter(), true);
if (in_array($userId, $firmengruppeUser)) {
$idErlaubt = true;
}
}
}
}
if ($zugriffsrechte != null && in_array($userId, json_decode($zugriffsrechte, true))) {
$idErlaubt = true;
}
}
} else {
if ($zugriffsrechte != null && in_array($userId, json_decode($zugriffsrechte, true))) {
$idErlaubt = true;
}
}
return $idErlaubt; // Liefert true oder false zurück ob der Mitarbeiter diese Tabellenzeile der Mitarbeiter sehen darf.
}
public function getUserBC_FirmenmitgliederGeordnet($sort = 'ASC')
{
$firmenprofil = $this->getUser()->getFirmenProfil();
$sortNach1 = 'vorname';
$sortNach2 = 'nachname';
if ($firmenprofil->getNamenSortieren() == 12) {
$sortNach1 = 'nachname';
$sortNach2 = 'vorname';
}
return $this->userRepository->findUserFirmenmitglieder($firmenprofil->getId(), $sortNach1, $sortNach2, $sort); // Liefert Firmenmitglieder
}
public function getUserBC_Firmenmitglieder_ohne_provisorischer_mitarbeiter()
{
$firmenprofil = $this->getUser()->getFirmenProfil();
return $this->userRepository->findBy(['firmen_profil' => $firmenprofil->getId(), 'provisorischer_mitarbeiter' => null]);
}
public function getLableInternerBereich($userId = 0)
{
$lable = [];
$lable['news'] = 'News';
$lable['events'] = 'Events';
$lable['umfragen'] = 'Umfragen';
$lable['dokumente'] = 'Dokumente';
$lable['dateien'] = 'Dateien';
$lable['notdienstkalender'] = 'Notdienstkalender';
$lable['mitarbeiter'] = 'Mitarbeiter';
$lable['direktChat'] = 'Direkt-Chat';
$lable['gruppenChat'] = 'Gruppen-Chat';
// Auch in AdminBasisController vorhanden
$freigabe = null;
if ($userId == 0) {
if ($this->getUser()?->getFirmenprofil()?->getMitarbeiterInternMenuFreigabe() != null) {
$freigabe = json_decode($this->getUser()->getFirmenprofil()->getMitarbeiterInternMenuFreigabe(), true);
}
} else {
$user = $this->userRepository->findOneBy(['id' => $userId]);
if ($user?->getFirmenProfil()?->getMitarbeiterInternMenuFreigabe() != null) {
$freigabe = json_decode($user->getFirmenprofil()->getMitarbeiterInternMenuFreigabe(), true);
}
}
if ($freigabe != null) {
if (isset($freigabe['lable_news']) && strlen($freigabe['lable_news']) > 2) {
$lable['news'] = $freigabe['lable_news'];
}
if (isset($freigabe['lable_events']) && strlen($freigabe['lable_events']) > 2) {
$lable['events'] = $freigabe['lable_events'];
}
if (isset($freigabe['lable_umfragen']) && strlen($freigabe['lable_umfragen']) > 2) {
$lable['umfragen'] = $freigabe['lable_umfragen'];
}
if (isset($freigabe['lable_dokumente']) && strlen($freigabe['lable_dokumente']) > 2) {
$lable['dokumente'] = $freigabe['lable_dokumente'];
}
if (isset($freigabe['lable_dateien']) && strlen($freigabe['lable_dateien']) > 2) {
$lable['dateien'] = $freigabe['lable_dateien'];
}
if (isset($freigabe['lable_notdienstkalender']) && strlen($freigabe['lable_notdienstkalender']) > 2) {
$lable['notdienstkalender'] = $freigabe['lable_notdienstkalender'];
}
if (isset($freigabe['lable_mitarbeiter']) && strlen($freigabe['lable_mitarbeiter']) > 2) {
$lable['mitarbeiter'] = $freigabe['lable_mitarbeiter'];
}
if (isset($freigabe['lable_direktChat']) && strlen($freigabe['lable_direktChat']) > 2) {
$lable['direktChat'] = $freigabe['lable_direktChat'];
}
if (isset($freigabe['lable_gruppenChat']) && strlen($freigabe['lable_gruppenChat']) > 2) {
$lable['gruppenChat'] = $freigabe['lable_gruppenChat'];
}
}
return $lable;
}
public function getUserBC_Chateintrag2($chatId, $neuerTag, $projektgruppe = null)
{
$chatNachricht = $this->chatRepository->findOneBy(['id' => $chatId]);
$user = $this->userRepository->findOneBy(['id' => $chatNachricht->getUserId()]);
$profilBild = $user->getUserProfil()->getProfilbild();
if ($profilBild != null) {
$profilBildLink = $this->generateUrl('admin_user_profilbild', ['id' => $chatNachricht->getUserId()]) . '?v=' . $profilBild;
} else {
$profilBildLink = $this->generateUrl('admin_user_profilbild', ['id' => 0]);
}
$strNachricht = '';
if ($neuerTag != null) {
$strNachricht = '<div class="col-12 border-bottom mt-4 mb-3 small"><b>' . $neuerTag . '</b></div>';
}
$odd = '';
$zeitFarbe = '';
$haken = '';
if ($this->getUser()->getId() == $chatNachricht->getUserId()) {
$odd = ' odd';
if ($chatNachricht->getGruppe() == null) {
if ($chatNachricht->getGelesen() == 0) {
$zeitFarbe = 'ms-2 chat-haken text-muted opacity-50';
$haken = '<span class="mdi mdi-check-all"></span>';
}
if ($chatNachricht->getGelesen() == 1) {
$zeitFarbe = 'ms-2 chat-haken text-success';
$haken = '<span class="mdi mdi-check-all"></span>';
}
}
}
$bildHTML = '';
if ($chatNachricht->getDateiname() != null) {
$bildGrosseStyle = '';
if ($chatNachricht->getBildHoehe() != null && $chatNachricht->getBildBreite() != null) {
$bildGrosseStyle = ' height="' . $chatNachricht->getBildHoehe() . '" width="' . $chatNachricht->getBildBreite() . '"';
}
if ($projektgruppe != null) {
$bildHTML = '<img src="/user/firma/gruppenchat/upload_datei/ansehen/' . $chatNachricht->getDateiname() . '" class="img-fluid chat-image mt-2 mb-2" loading="lazy" ' . $bildGrosseStyle . '>';
} else {
$bildHTML = '<img src="/user/firma/chat/upload_datei/ansehen/' . $chatId . '" class="img-fluid chat-image mt-2 mb-2" loading="lazy" ' . $bildGrosseStyle . '>';
}
}
$nachricht = htmlspecialchars($chatNachricht->getNachricht());
$linkNachricht = '';
foreach ($chatNachricht->getLinks() as $link) {
$linkeingabe = $link->getLink();
$nachricht = str_replace($linkeingabe, '<a href="' . $linkeingabe . '" target="_blank" class="text-accent" style="word-break:break-all;">' . $linkeingabe . '</a>', $nachricht);
//$nachricht = str_replace($linkeingabe, 'LINK', $nachricht);
$linkNachricht .= '<div class="card mt-1"><div class="card-body p-2 text-start">';
if ($link->getTyp() == 0) {
$linkNachricht .= '<a href="' . $linkeingabe .'" target="_blank" class="text-dark">';
$imgDiv = '';
if($link->getBildUrl() != null) {
$imgDiv = '<div class="mt-1 mb-1"><img class="img-fluid" src="' . $link->getBildUrl() . '"/></div>';
}
$beschreibungDiv = '';
if($link->getBeschreibung() != null) {
$beschreibungDiv = '<div>' . $link->getBeschreibung() . '</div>';
}
$linkNachricht .= '<div class="fs-6">' . $link->getTitle() . '</div>' . $imgDiv . $beschreibungDiv;
$linkNachricht .= '</a>';
}
if ($link->getTyp() == 1) {
$linkNachricht .= '<div><a href="' . $linkeingabe .'" target="_blank"><img class="img-fluid" src="' . $linkeingabe . '"/></a></div>';
}
if ($link->getTyp() == 2) {
if (!str_contains($linkeingabe, '/embed/')) {
$splitBildUrl = explode('/', $link->getBildUrl());
$youtubeId = $splitBildUrl[count($splitBildUrl) - 2];
if (str_starts_with($linkeingabe, 'https://www.youtube.com/')) {
$linkeingabe = 'https://www.youtube.com//embed/' . $youtubeId;
}
if (str_starts_with($linkeingabe, 'https://youtube.com')) {
$linkeingabe = 'https://youtube.com/embed/' . $youtubeId;
}
if (str_starts_with($linkeingabe, 'https://www.youtube.de')) {
$linkeingabe = 'https://www.youtube.de/embed/' . $youtubeId;
}
if (str_starts_with($linkeingabe, 'https://youtube.de')) {
$linkeingabe = 'https://youtube.de/embed/' . $youtubeId;
}
if (str_starts_with($linkeingabe, 'https://youtu.be/')) {
$linkeingabe = 'https://www.youtube.com/embed/' . $youtubeId;
}
}
$linkNachricht .= '<div class="fs-6">' . $link->getTitle() . '</div>
<div class="mt-1 mb-1">
<div class="videolink-video ratio ratio-16x9">
<iframe class="video-iframe" src="' . $linkeingabe . '" title="Video" allowfullscreen></iframe>
</div>
</div>
<div>' . $link->getBeschreibung() . '</div>
';
}
$linkNachricht .= '</div></div>';
}
//$linkNachricht = '';
$strNachricht .= '<li class="clearfix' . $odd . ' chat-li" data-chat-id="' . $chatId . '">
<div class="chat-avatar"><img src="' . $profilBildLink . '" class="rounded-circle" alt="Profilbild"><i>' . $chatNachricht->getGesendetAm()->format('H:i') . '</i></div>
<div class="conversation-text"><div class="ctext-wrap"><i>' . $user->getUserProfil()->getVorname() . ' ' . $user->getUserProfil()->getNachname() . '<span class="' . $zeitFarbe . '">' . $haken . '</span></i>
' . $bildHTML . '
<p>' . $nachricht . '</p>' . $linkNachricht . '</div></div></li>';
return $strNachricht;
}
public function getUserBC_script_bildupload(): array
{
$uploadTemplateScript = '<script id="template-upload" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-upload fade{%=o.options.loadImageFileTypes.test(file.type)?\' image\':\'\'%}">
<td>
<div>
<span class="preview"></span>
</div>
<div>
<p class="name">{%=file.name%}</p>
<strong class="error text-danger"></strong>
</div>
<div>
<p class="size">Upload...</p>
<div class="progress progress-striped active bg-white" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">
<div class="progress-bar progress-bar-success" style="width:0%;"></div>
</div>
</div>
<div>
{% if (!o.options.autoUpload && o.options.edit && o.options.loadImageFileTypes.test(file.type)) { %}
<button class="btn btn-sm btn-success edit" data-index="{%=i%}" disabled>
<i class="glyphicon glyphicon-edit"></i>
<span>Edit</span>
</button>
{% } %}
{% if (!i && !o.options.autoUpload) { %}
<button class="btn btn-sm btn-info start me-3" disabled>
<i class="glyphicon glyphicon-upload"></i>
<span>Upload starten</span>
</button>
{% } %}
{% if (!i) { %}
<button class="btn btn-sm btn-danger cancel">
<i class="glyphicon glyphicon-ban-circle"></i>
<span>Abbrechen</span>
</button>
{% } %}
</div>
</td>
</tr>
{% } %}
</script>';
$downloadTemplateScript = '<script id="template-download" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-download fade{%=file.thumbnailUrl?\' image\':\'\'%}">
<td>
<span class="preview">
{% if (file.thumbnailUrl) { %}
<a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" data-gallery><img src="{%=file.thumbnailUrl%}"></a>
{% } %}
</span>
</td>
<td>
<p class="name">
{% if (file.url) { %}
<a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" {%=file.thumbnailUrl?\'data-gallery\':\'\'%}>{%=file.name%}</a>
{% } else { %}
<span>{%=file.name%}</span>
{% } %}
</p>
{% if (file.error) { %}
<div><span class="label label-danger">Error</span> {%=file.error%}</div>
{% } %}
</td>
<td>
<span class="size">{%=o.formatFileSize(file.size)%}</span>
</td>
<td>
{% if (file.deleteUrl) { %}
<button class="btn btn-danger delete" data-type="{%=file.deleteType%}" data-url="{%=file.deleteUrl%}"{% if (file.deleteWithCredentials) { %} data-xhr-fields=\'{"withCredentials":true}\'{% } %}>
<i class="glyphicon glyphicon-trash"></i>
<span>Delete</span>
</button>
<input type="checkbox" name="delete" value="1" class="toggle">
{% } else { %}
<button class="btn btn-warning cancel">
<i class="glyphicon glyphicon-ban-circle"></i>
<span>Cancel</span>
</button>
{% } %}
</td>
</tr>
{% } %}
</script>';
$arrayScript = [$uploadTemplateScript, $downloadTemplateScript];
return $arrayScript;
}
}