<?php
namespace App\Controller;
use App\Entity\Amtsblatt;
use App\Entity\Baugesuch;
use App\Entity\Baugesuchausnahmebewilligung;
use App\Entity\Einbuergerungsgesuch;
use App\Entity\Erdsonde;
use App\Entity\Gestaltungsplan;
use App\Entity\Konzessionsbewilligung;
use App\Entity\Konzessionsgesuch;
use App\Entity\KonzessionsgesuchGewaesser;
use App\Entity\KonzessionsgesuchUmwelt;
use App\Entity\Nutzungsplanung;
use App\Entity\Rodungsgesuch;
use App\Entity\Schutzzonenplan;
use Doctrine\ORM\EntityManagerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
class DefaultController extends AbstractController
{
#[Route(path: '/', name: 'amtsblatt_admin.home')]
#[Security("is_granted('ROLE_USER_DRAFT')")]
public function dashboard(Request $request, UserPasswordHasherInterface $userPasswordHasher, AuthorizationCheckerInterface $authorizationChecker, EntityManagerInterface $em): Response
{
// Checken, ob User Passwort = Usernamen ist, dann Warnmeldung ausgeben.
// Dieser Check könnte entfernt werden, falls alle User neues Passwort gesetzt haben.
$passwordSameAsUsername = false;
if( $userPasswordHasher->isPasswordValid($this->getUser(), $this->getUser()->getUserIdentifier()) )
{
$passwordSameAsUsername = true;
}
// Ende
if ($authorizationChecker->isGranted('ROLE_ADMIN')) {
// Checken, ob noch genügend Amtsblaetter erfasst
$activeAnzAmtsblaetter = count($em->getRepository(Amtsblatt::class)->getAllActive());
$msgNeueAmtsblaetterErfassen = $this->getParameter('app_notify_min_anz_amtsblaetter') - $activeAnzAmtsblaetter;
// Ende
// Editierbare Amtsblaetter holen
$amtsblaetter = $em->getRepository(Amtsblatt::class)->findAllByYear(date('Y'), 'ASC');
// Aktuell gewähltes Amtsblatt
$activeAmtsblatt = null;
$statistic = [];
if ($request->get('id')){
$activeAmtsblatt = $em->getRepository(Amtsblatt::class)->find($request->get('id'));
}
if (!$activeAmtsblatt){
// Zwei Stunden länger soll das aktuell editierbare Amtsblatt im Dashboard gehalten werden.
$activeAmtsblatt = $em->getRepository(Amtsblatt::class)->getCurrentEditable(-2);
}
if ($activeAmtsblatt){
$statistic['baugesuche'] = $em->getRepository(Baugesuch::class)->amtsblattStatistic($activeAmtsblatt);
$statistic['baugesuchausnahmebewilligungen'] = $em->getRepository(Baugesuchausnahmebewilligung::class)->amtsblattStatistic($activeAmtsblatt);
$statistic['gestaltungsplaene'] = $em->getRepository(Gestaltungsplan::class)->amtsblattStatistic($activeAmtsblatt);
$statistic['schutzzonenplaene'] = $em->getRepository(Schutzzonenplan::class)->amtsblattStatistic($activeAmtsblatt);
$statistic['nutzungsplanungen'] = $em->getRepository(Nutzungsplanung::class)->amtsblattStatistic($activeAmtsblatt);
$statistic['rodungsgesuche'] = $em->getRepository(Rodungsgesuch::class)->amtsblattStatistic($activeAmtsblatt);
$statistic['einbuergerungsgesuche'] = $em->getRepository(Einbuergerungsgesuch::class)->amtsblattStatistic($activeAmtsblatt);
$statistic['erdsonden'] = $em->getRepository(Erdsonde::class)->amtsblattStatistic($activeAmtsblatt);
$statistic['konzessionsgesuche'] = $em->getRepository(Konzessionsgesuch::class)->amtsblattStatistic($activeAmtsblatt);
$statistic['konzessionsgesuche_umwelt'] = $em->getRepository(KonzessionsgesuchUmwelt::class)->amtsblattStatistic($activeAmtsblatt);
$statistic['konzessionsgesuche_gewaesser'] = $em->getRepository(KonzessionsgesuchGewaesser::class)->amtsblattStatistic($activeAmtsblatt);
$statistic['konzessionsbewilligungen'] = $em->getRepository(Konzessionsbewilligung::class)->amtsblattStatistic($activeAmtsblatt);
}
// Ende
return $this->render(
'Default/dashboard-admin.html.twig',
['msgNeueAmtsblaetterErfassen' => $msgNeueAmtsblaetterErfassen, 'amtsblaetter' => $amtsblaetter, 'activeAmtsblatt' => $activeAmtsblatt, 'statistic' => $statistic, 'passwordSameAsUsername' => $passwordSameAsUsername]
);
} else {
return $this->render(
'Default/dashboard-user.html.twig',
['passwordSameAsUsername' => $passwordSameAsUsername]
);
}
}
#[Route(path: '/set-user-heartbeat.html', name: 'amtsblatt_admin.default_setheartbeat', methods: ['POST'])]
#[Security("is_granted('ROLE_USER_DRAFT')")]
public function setHeartbeat(Request $request, EntityManagerInterface $em): Response
{
$user = $this->getUser();
if ($user and !$this->isGranted('IS_IMPERSONATOR')) {
// Browser Agent und IP mitloggen für Debug Zwecke
$user->setLastBrowserAgentAndIp("IP Address: ". $request->getClientIp() ."\n\nBrowser Agent:\n". $request->headers->get('user-agent'));
$user->setLastHeartbeat();
$em->persist($user);
$em->flush();
}
return new Response('Heartbeat signal received!');
}
}