feat: integrate with htmx

This commit is contained in:
Björn Fromme
2024-02-07 10:15:59 +01:00
parent 4d1799ca49
commit 1e572606f8
154 changed files with 1447 additions and 1461 deletions
@@ -5,9 +5,11 @@ namespace App\Controller\Admin\Application;
use App\Entity\Application;
use App\Entity\Disposition;
use App\Event\DispositionCreatedEvent;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -25,24 +27,32 @@ class DisposeController extends AbstractController
#[Route('/admin/application/dispose/{uuid}', name: 'app_admin_application_dispose')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
#[IsGranted('DISPOSE', subject: 'application')]
public function index(Application $application): Response
public function index(Application $application, Request $request): Response
{
$disposition = new Disposition($application);
if (true === $request->isMethod('POST')) {
$disposition = new Disposition($application);
$this->entityManager->persist($disposition);
$this->entityManager->remove($application);
$this->entityManager->flush();
$this->entityManager->persist($disposition);
$this->entityManager->remove($application);
$this->entityManager->flush();
$this->eventDispatcher->dispatch(new DispositionCreatedEvent($disposition), DispositionCreatedEvent::NAME);
$this->eventDispatcher->dispatch(new DispositionCreatedEvent($disposition), DispositionCreatedEvent::NAME);
$this->addFlash('success', 'Teamer:in wurde eingeteilt');
$this->logger->info('Create disposition', [
'disposition_id' => $disposition->getId(),
'teamer' => (string) $application->getTeamer(),
]);
$this->addFlash('success', 'Teamer:in wurde eingeteilt');
$this->logger->info('Create disposition', [
'disposition_id' => $disposition->getId(),
'teamer' => (string) $application->getTeamer(),
]);
return $this->redirectToRoute('app_admin_assignment_detail', [
'uuid' => $application->getAssignment()->getUuid(),
$redirectUrl = $this->generateUrl('app_admin_assignment_detail', [
'uuid' => $application->getAssignment()->getUuid(),
]);
return new HxRedirectResponse($redirectUrl);
}
return $this->render('admin/application/modal_dispose.html.twig', [
'application' => $application,
]);
}
}
@@ -3,21 +3,17 @@
namespace App\Controller\Admin\Application;
use App\Entity\Application;
use App\Model\AjaxModalResponseDto;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class InfoController extends AbstractController
{
#[Route('/admin/application/info/{uuid}', name: 'app_admin_application_info')]
public function index(Application $application): JsonResponse
public function index(Application $application): Response
{
$response = new AjaxModalResponseDto();
$response->setContent($this->renderView('admin/application/info.html.twig', [
return $this->render('admin/application/modal_info.html.twig', [
'application' => $application,
]));
return $this->json($response);
]);
}
}
@@ -5,13 +5,13 @@ namespace App\Controller\Admin\Application;
use App\Entity\Application;
use App\Event\ApplicationStatusEvent;
use App\Form\ApplicationStatusType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use App\Model\ApplicationStatusDto;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
@@ -28,12 +28,10 @@ class StatusController extends AbstractController
#[Route('/admin/application/status/{uuid}', name: 'app_admin_application_status')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
#[IsGranted('STATUS', subject: 'application')]
public function index(Application $application, Request $request): JsonResponse
public function index(Application $application, Request $request): Response
{
$response = new AjaxModalResponseDto();
$formAction = $this->generateUrl('app_admin_application_status', ['uuid' => $application->getUuid()]);
$statusDto = new ApplicationStatusDto($application);
$form = $this->createForm(ApplicationStatusType::class, $statusDto, ['action' => $formAction, 'ajax_submit' => true]);
$form = $this->createForm(ApplicationStatusType::class, $statusDto);
$form->handleRequest($request);
@@ -53,15 +51,13 @@ class StatusController extends AbstractController
'teamer' => (string) $application->getTeamer(),
]);
$response->setCloseAndRedirect($this->generateUrl('app_admin_assignment_detail', [
return new HxRedirectResponse($this->generateUrl('app_admin_assignment_detail', [
'uuid' => $application->getAssignment()->getUuid(),
]));
} else {
$response->setContent($this->renderView('admin/application/status.html.twig', [
'form' => $form,
]));
}
return $this->json($response);
return $this->render('admin/application/modal_status.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -30,7 +30,13 @@ class CreateController extends AbstractController
$assignment = new Assignment();
$assignment->setOwner($user);
$form = $this->createForm(AssignmentType::class, $assignment);
$form = $this->createForm(
AssignmentType::class,
$assignment,
[
'pickup_form_url' => $this->generateUrl('app_admin_assignment_pickup_form'),
]
);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -49,7 +55,7 @@ class CreateController extends AbstractController
}
return $this->render('admin/assignment/create.html.twig', [
'form' => $form,
'form' => $form->createView(),
]);
}
}
@@ -3,9 +3,11 @@
namespace App\Controller\Admin\Assignment;
use App\Entity\Assignment;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -20,19 +22,25 @@ class DeleteController extends AbstractController
#[Route('/admin/assignment/delete/{uuid}', name: 'app_admin_assignment_delete')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
public function index(Assignment $assignment): Response
public function index(Assignment $assignment, Request $request): Response
{
$assignment->setDeleted();
$this->entityManager->flush();
if (true === $request->isMethod('POST')) {
$assignment->setDeleted();
$this->entityManager->flush();
$this->logger->info('Delete assignment', [
'assignment_id' => $assignment->getId(),
'destination' => (string) $assignment->getDestination(),
'job_profile' => $assignment->getJobProfile()->getName(),
$this->logger->info('Delete assignment', [
'assignment_id' => $assignment->getId(),
'destination' => (string) $assignment->getDestination(),
'job_profile' => $assignment->getJobProfile()->getName(),
]);
$this->addFlash('success', 'Der Einsatz wurde gelöscht');
return new HxRedirectResponse($this->generateUrl('app_admin_assignment_index'));
}
return $this->render('admin/assignment/modal_delete.html.twig', [
'assignment' => $assignment,
]);
$this->addFlash('success', 'Der Einsatz wurde gelöscht');
return $this->redirectToRoute('app_admin_assignment_index');
}
}
@@ -26,7 +26,13 @@ class DuplicateController extends AbstractController
{
$copy = Assignment::duplicate($assignment);
$form = $this->createForm(AssignmentType::class, $copy);
$form = $this->createForm(
AssignmentType::class,
$copy,
[
'pickup_form_url' => $this->generateUrl('app_admin_assignment_pickup_form'),
]
);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -48,7 +54,7 @@ class DuplicateController extends AbstractController
}
return $this->render('admin/assignment/duplicate.html.twig', [
'form' => $form,
'form' => $form->createView(),
]);
}
}
@@ -24,7 +24,13 @@ class EditController extends AbstractController
#[IsGranted('EDIT', subject: 'assignment')]
public function index(Assignment $assignment, Request $request): Response
{
$form = $this->createForm(AssignmentType::class, $assignment);
$form = $this->createForm(
AssignmentType::class,
$assignment,
[
'pickup_form_url' => $this->generateUrl('app_admin_assignment_pickup_form'),
]
);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -42,7 +48,7 @@ class EditController extends AbstractController
}
return $this->render('admin/assignment/edit.html.twig', [
'form' => $form,
'form' => $form->createView(),
]);
}
}
@@ -4,13 +4,13 @@ namespace App\Controller\Admin\Disposition;
use App\Entity\Disposition;
use App\Event\DispositionDeletedEvent;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
@@ -27,12 +27,10 @@ class DeleteController extends AbstractController
#[Route('/admin/disposition/delete/{uuid}', name: 'app_admin_disposition_delete')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
#[IsGranted('DELETE', subject: 'disposition')]
public function index(Disposition $disposition, Request $request): JsonResponse
public function index(Disposition $disposition, Request $request): Response
{
$response = new AjaxModalResponseDto();
$formAction = $this->generateUrl('app_admin_disposition_delete', ['uuid' => $disposition->getUuid()]);
$form = $this
->createFormBuilder($disposition, ['action' => $formAction, 'ajax_submit' => true])
->createFormBuilder($disposition)
->add('remarks', TextareaType::class, [
'label' => 'Kommentar/Begründung',
'required' => false,
@@ -56,15 +54,13 @@ class DeleteController extends AbstractController
$this->entityManager->remove($disposition);
$this->entityManager->flush();
$response->setCloseAndRedirect($this->generateUrl('app_admin_assignment_detail', [
return new HxRedirectResponse($this->generateUrl('app_admin_assignment_detail', [
'uuid' => $disposition->getAssignment()->getUuid(),
]));
} else {
$response->setContent($this->renderView('admin/disposition/delete.html.twig', [
'form' => $form,
]));
}
return $this->json($response);
return $this->render('admin/disposition/modal_delete.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -5,14 +5,14 @@ namespace App\Controller\Admin\Document;
use App\Entity\Upload;
use App\Event\DocumentRejectedEvent;
use App\Form\DocumentCheckType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use App\Model\DocumentCheckDto;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\Attribute\Target;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
use Symfony\Component\Workflow\WorkflowInterface;
@@ -32,20 +32,10 @@ class CheckController extends AbstractController
#[Route('/admin/document/check/{uuid}', name: 'app_admin_document_check')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
#[IsGranted('CHECK', subject: 'document')]
public function index(Upload $document, Request $request): JsonResponse
public function index(Upload $document, Request $request): Response
{
$response = new AjaxModalResponseDto();
$formData = new DocumentCheckDto($document);
$formAction = $this->generateUrl('app_admin_document_check', ['uuid' => $document->getUuid()]);
$form = $this->createForm(
DocumentCheckType::class,
$formData,
[
'action' => $formAction,
'ajax_submit' => true,
'document_type' => $document->getType(),
]
);
$form = $this->createForm(DocumentCheckType::class, $formData, ['document_type' => $document->getType()]);
$form->handleRequest($request);
@@ -75,16 +65,13 @@ class CheckController extends AbstractController
]);
}
$returnUrl = $this->generateUrl('app_admin_document_index');
$response->setCloseAndRedirect($returnUrl);
} else {
$response->setContent($this->renderView('admin/document/check.html.twig', [
'document' => $document,
'form' => $form,
]));
return new HxRedirectResponse($this->generateUrl('app_admin_document_index'));
}
return $this->json($response);
return $this->render('admin/document/modal_check.html.twig', [
'document' => $document,
'form' => $form->createView(),
]);
}
private function rejectDocument(Upload $document, string $comment = null): void
@@ -3,9 +3,11 @@
namespace App\Controller\Admin\Document;
use App\Entity\Upload;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -21,17 +23,23 @@ class DeleteController extends AbstractController
#[Route('/admin/document/delete/{uuid}', name: 'app_admin_document_delete')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
#[IsGranted('DELETE', subject: 'document')]
public function index(Upload $document): Response
public function index(Upload $document, Request $request): Response
{
$this->entityManager->remove($document);
$this->entityManager->flush();
if (true === $request->isMethod('POST')) {
$this->entityManager->remove($document);
$this->entityManager->flush();
$this->addFlash('success', 'Das Dokument wurde gelöscht');
$this->logger->info('Delete document', [
'document_filename' => $document->getOriginalFilename(),
'owner' => $document->getOwner()->getFullName(),
$this->addFlash('success', 'Das Dokument wurde gelöscht');
$this->logger->info('Delete document', [
'document_filename' => $document->getOriginalFilename(),
'owner' => $document->getOwner()->getFullName(),
]);
return new HxRedirectResponse($this->generateUrl('app_admin_document_index'));
}
return $this->render('admin/document/modal_delete.html.twig', [
'document' => $document,
]);
return $this->redirectToRoute('app_admin_document_index');
}
}
@@ -4,12 +4,12 @@ namespace App\Controller\Admin\Feedback;
use App\Entity\Feedback;
use App\Form\FeedbackApproveType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -23,11 +23,9 @@ class ApproveController extends AbstractController
#[Route('/admin/feedback/approve/{uuid}', name: 'app_admin_feedback_approve')]
#[IsGranted('ROLE_ADMIN')]
public function index(Feedback $feedback, Request $request): JsonResponse
public function index(Feedback $feedback, Request $request): Response
{
$response = new AjaxModalResponseDto();
$action = $this->generateUrl('app_admin_feedback_approve', ['uuid' => $feedback->getUuid()]);
$form = $this->createForm(FeedbackApproveType::class, $feedback, ['action' => $action, 'ajax_submit' => true]);
$form = $this->createForm(FeedbackApproveType::class, $feedback);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -39,15 +37,12 @@ class ApproveController extends AbstractController
'feedback_uuid' => $feedback->getUuid(),
]);
$returnUrl = $this->generateUrl('app_admin_index');
$response->setCloseAndRedirect($returnUrl);
} else {
$response->setContent($this->renderView('admin/feedback/approve.html.twig', [
'feedback' => $feedback,
'form' => $form->createView(),
]));
return new HxRedirectResponse($this->generateUrl('app_admin_index'));
}
return $this->json($response);
return $this->render('admin/feedback/modal_approve.html.twig', [
'feedback' => $feedback,
'form' => $form->createView(),
]);
}
}
@@ -4,12 +4,12 @@ namespace App\Controller\Admin\System\Availability;
use App\Entity\Availability;
use App\Form\AvailabilityType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -23,13 +23,10 @@ class CreateController extends AbstractController
#[Route('/admin/system/availability/create', name: 'app_admin_system_availability_create')]
#[IsGranted('ROLE_ADMIN')]
public function index(Request $request): JsonResponse
public function index(Request $request): Response
{
$response = new AjaxModalResponseDto();
$action = $this->generateUrl('app_admin_system_availability_create');
$availability = new Availability();
$form = $this->createForm(AvailabilityType::class, $availability, ['action' => $action, 'ajax_submit' => true]);
$form = $this->createForm(AvailabilityType::class, $availability);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -42,15 +39,11 @@ class CreateController extends AbstractController
'availability_range' => (string) $availability,
]);
$redirectUrl = $this->generateUrl('app_admin_system_availability_index');
$response->setCloseAndRedirect($redirectUrl);
} else {
$content = $this->renderView('admin/system/availability/form.html.twig', [
'form' => $form,
]);
$response->setContent($content);
return new HxRedirectResponse($this->generateUrl('app_admin_system_availability_index'));
}
return $this->json($response);
return $this->render('admin/system/availability/modal_create.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -3,9 +3,11 @@
namespace App\Controller\Admin\System\Availability;
use App\Entity\Availability;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -20,17 +22,23 @@ class DeleteController extends AbstractController
#[Route('/admin/system/availability/delete/{id}', name: 'app_admin_system_availability_delete', methods: ['POST'])]
#[IsGranted('ROLE_ADMIN')]
public function index(Availability $availability): Response
public function index(Availability $availability, Request $request): Response
{
$availability->setDeleted();
$this->entityManager->flush();
if (true === $request->isMethod('POST')) {
$availability->setDeleted();
$this->entityManager->flush();
$this->addFlash('success', 'Die Verfügbarkeit wurde gelöscht');
$this->logger->info('Delete availability', [
'availability_id' => $availability->getId(),
'availability_range' => (string) $availability,
$this->addFlash('success', 'Die Verfügbarkeit wurde gelöscht');
$this->logger->info('Delete availability', [
'availability_id' => $availability->getId(),
'availability_range' => (string) $availability,
]);
return new HxRedirectResponse($this->generateUrl('app_admin_system_availability_index'));
}
return $this->render('admin/system/availability/modal_delete.html.twig', [
'availability' => $availability,
]);
return $this->redirectToRoute('app_admin_system_availability_index');
}
}
@@ -4,12 +4,12 @@ namespace App\Controller\Admin\System\Availability;
use App\Entity\Availability;
use App\Form\AvailabilityType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -23,14 +23,11 @@ class DuplicateController extends AbstractController
#[Route('/admin/system/availability/duplicate/{id}', name: 'app_admin_system_availability_duplicate')]
#[IsGranted('ROLE_ADMIN')]
public function index(Availability $availability, Request $request): JsonResponse
public function index(Availability $availability, Request $request): Response
{
$copy = Availability::duplicate($availability);
$response = new AjaxModalResponseDto();
$action = $this->generateUrl('app_admin_system_availability_duplicate', ['id' => $availability->getId()]);
$form = $this->createForm(AvailabilityType::class, $copy, ['action' => $action, 'ajax_submit' => true]);
$form = $this->createForm(AvailabilityType::class, $copy);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -45,15 +42,11 @@ class DuplicateController extends AbstractController
'duplicate_range' => (string) $copy,
]);
$redirectUrl = $this->generateUrl('app_admin_system_availability_index');
$response->setCloseAndRedirect($redirectUrl);
} else {
$content = $this->renderView('admin/system/availability/form.html.twig', [
'form' => $form,
]);
$response->setContent($content);
return new HxRedirectResponse($this->generateUrl('app_admin_system_availability_index'));
}
return $this->json($response);
return $this->render('admin/system/availability/modal_duplicate.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -4,12 +4,12 @@ namespace App\Controller\Admin\System\Availability;
use App\Entity\Availability;
use App\Form\AvailabilityType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -23,12 +23,9 @@ class EditController extends AbstractController
#[Route('/admin/system/availability/edit/{id}', name: 'app_admin_system_availability_edit')]
#[IsGranted('ROLE_ADMIN')]
public function index(Availability $availability, Request $request): JsonResponse
public function index(Availability $availability, Request $request): Response
{
$response = new AjaxModalResponseDto();
$action = $this->generateUrl('app_admin_system_availability_edit', ['id' => $availability->getId()]);
$form = $this->createForm(AvailabilityType::class, $availability, ['action' => $action, 'ajax_submit' => true]);
$form = $this->createForm(AvailabilityType::class, $availability);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -40,15 +37,11 @@ class EditController extends AbstractController
'availability_range' => (string) $availability,
]);
$redirectUrl = $this->generateUrl('app_admin_system_availability_index');
$response->setCloseAndRedirect($redirectUrl);
} else {
$content = $this->renderView('admin/system/availability/form.html.twig', [
'form' => $form
]);
$response->setContent($content);
return new HxRedirectResponse($this->generateUrl('app_admin_system_availability_index'));
}
return $this->json($response);
return $this->render('admin/system/availability/modal_edit.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -6,13 +6,13 @@ use App\Entity\Contact;
use App\Entity\Upload;
use App\Entity\User;
use App\Form\ContactType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use App\Service\Upload\UploadHandler;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -27,11 +27,9 @@ class CreateController extends AbstractController
#[Route('/admin/system/contact/create', name: 'app_admin_system_contact_create')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
public function index(Request $request): JsonResponse
public function index(Request $request): Response
{
$response = new AjaxModalResponseDto();
$contact = new Contact();
$formAction = $this->generateUrl('app_admin_system_contact_create');
// Handle upload independently from form submission to avoid issues with failing validation
$uploadSession = $this->uploadHandler->getUploadSession();
@@ -48,15 +46,7 @@ class CreateController extends AbstractController
$this->uploadHandler->destroyUploadSession();
}
$form = $this->createForm(
ContactType::class,
$contact,
[
'action' => $formAction,
'ajax_submit' => true,
'upload_session' => $uploadSession,
]
);
$form = $this->createForm(ContactType::class, $contact, ['upload_session' => $uploadSession]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -68,13 +58,11 @@ class CreateController extends AbstractController
'contact_name' => $contact->getName(),
]);
$response->setCloseAndRedirect($this->generateUrl('app_admin_system_contact_index'));
} else {
$response->setContent($this->renderView('admin/system/contact/create.html.twig', [
'form' => $form,
]));
return new HxRedirectResponse($this->generateUrl('app_admin_system_contact_index'));
}
return $this->json($response);
return $this->render('admin/system/contact/modal_create.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -3,9 +3,11 @@
namespace App\Controller\Admin\System\Contact;
use App\Entity\Contact;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -20,17 +22,23 @@ class DeleteController extends AbstractController
#[Route('/admin/system/contact/delete/{id}', name: 'app_admin_system_contact_delete')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
public function index(Contact $contact): Response
public function index(Contact $contact, Request $request): Response
{
$this->entityManager->remove($contact);
$this->entityManager->flush();
if (true === $request->isMethod('POST')) {
$this->entityManager->remove($contact);
$this->entityManager->flush();
$this->addFlash('success', 'Die Ansprechperson wurde gelöscht');
$this->logger->info('Delete contact', [
'contact_id' => $contact->getId(),
'contact_name' => $contact->getName(),
$this->addFlash('success', 'Die Ansprechperson wurde gelöscht');
$this->logger->info('Delete contact', [
'contact_id' => $contact->getId(),
'contact_name' => $contact->getName(),
]);
return new HxRedirectResponse($this->generateUrl('app_admin_system_contact_index'));
}
return $this->render('admin/system/contact/modal_delete.html.twig', [
'contact' => $contact,
]);
return $this->redirectToRoute('app_admin_system_contact_index');
}
}
@@ -6,13 +6,13 @@ use App\Entity\Contact;
use App\Entity\Upload;
use App\Entity\User;
use App\Form\ContactType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use App\Service\Upload\UploadHandler;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -27,10 +27,8 @@ class EditController extends AbstractController
#[Route('/admin/system/contact/edit/{id}', name: 'app_admin_system_contact_edit')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
public function index(Contact $contact, Request $request): JsonResponse
public function index(Contact $contact, Request $request): Response
{
$response = new AjaxModalResponseDto();
$formAction = $this->generateUrl('app_admin_system_contact_edit', ['id' => $contact->getId()]);
// Handle upload independently from form submission to avoid issues with failing validation
$uploadSession = $this->uploadHandler->getUploadSession();
if (true === $request->isMethod('POST') && 0 < $uploadSession->getCount()) {
@@ -46,15 +44,7 @@ class EditController extends AbstractController
$this->uploadHandler->destroyUploadSession();
}
$form = $this->createForm(
ContactType::class,
$contact,
[
'action' => $formAction,
'ajax_submit' => true,
'upload_session' => $uploadSession,
]
);
$form = $this->createForm(ContactType::class, $contact, ['upload_session' => $uploadSession]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -65,13 +55,11 @@ class EditController extends AbstractController
'contact_name' => $contact->getName(),
]);
$response->setCloseAndRedirect($this->generateUrl('app_admin_system_contact_index'));
} else {
$response->setContent($this->renderView('admin/system/contact/edit.html.twig', [
'form' => $form,
]));
return new HxRedirectResponse($this->generateUrl('app_admin_system_contact_index'));
}
return $this->json($response);
return $this->render('admin/system/contact/modal_edit.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -3,9 +3,11 @@
namespace App\Controller\Admin\System\Document;
use App\Entity\Upload;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -21,17 +23,23 @@ class DeleteController extends AbstractController
#[Route('/admin/system/document/delete/{uuid}', name: 'app_admin_system_document_delete')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
#[IsGranted('DELETE', subject: 'document')]
public function index(Upload $document): Response
public function index(Upload $document, Request $request): Response
{
$this->entityManager->remove($document);
$this->entityManager->flush();
if (true === $request->isMethod('POST')) {
$this->entityManager->remove($document);
$this->entityManager->flush();
$this->addFlash('success', 'Das Dokument wurde gelöscht');
$this->logger->info('Delete document', [
'document_id' => $document->getId(),
'document_filename' => $document->getOriginalFilename(),
$this->addFlash('success', 'Das Dokument wurde gelöscht');
$this->logger->info('Delete document', [
'document_id' => $document->getId(),
'document_filename' => $document->getOriginalFilename(),
]);
return new HxRedirectResponse($this->generateUrl('app_admin_system_document_index'));
}
return $this->render('admin/system/document/modal_delete.html.twig', [
'document' => $document,
]);
return $this->redirectToRoute('app_admin_system_document_index');
}
}
@@ -3,14 +3,13 @@
namespace App\Controller\Admin\System\Document;
use App\Entity\Upload;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -24,15 +23,12 @@ class EditController extends AbstractController
#[Route('/admin/system/document/edit/{uuid}', name: 'app_admin_system_document_edit')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
public function index(Upload $upload, Request $request): JsonResponse
public function index(Upload $upload, Request $request): Response
{
$response = new AjaxModalResponseDto();
$formAction = $this->generateUrl('app_admin_system_document_edit', ['uuid' => $upload->getUuid()]);
$nameBefore = $upload->getDisplayName();
$form = $this
->createFormBuilder($upload, ['action' => $formAction, 'ajax_submit' => true])
->createFormBuilder($upload)
->add('displayName', TextType::class, [
'label' => 'angezeigter Name',
'attr' => [
@@ -54,13 +50,11 @@ class EditController extends AbstractController
'document_name_after' => $upload->getDisplayName(),
]);
$response->setCloseAndRedirect($this->generateUrl('app_admin_system_document_index'));
} else {
$response->setContent($this->renderView('admin/system/document/edit.html.twig', [
'form' => $form->createView(),
]));
return new HxRedirectResponse($this->generateUrl('app_admin_system_document_index'));
}
return $this->json($response);
return $this->render('admin/system/document/modal_edit.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -4,13 +4,13 @@ namespace App\Controller\Admin\System\Document;
use App\Entity\Upload;
use App\Entity\User;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use App\Service\Upload\UploadHandler;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -25,7 +25,7 @@ class ReplaceController extends AbstractController
#[Route('/admin/system/document/replace/{uuid}', name: 'app_admin_system_document_replace')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
public function index(Upload $upload, Request $request): JsonResponse
public function index(Upload $upload, Request $request): Response
{
// Handle upload independently from form submission to avoid issues with failing validation
$uploadSession = $this->uploadHandler->getUploadSession();
@@ -38,7 +38,6 @@ class ReplaceController extends AbstractController
$this->uploadHandler->destroyUploadSession();
}
$response = new AjaxModalResponseDto();
$formAction = $this->generateUrl('app_admin_system_document_replace', ['uuid' => $upload->getUuid()]);
$filenameBefore = $upload->getOriginalFilename();
@@ -57,13 +56,11 @@ class ReplaceController extends AbstractController
'document_filename_after' => $upload->getOriginalFilename(),
]);
$response->setCloseAndRedirect($this->generateUrl('app_admin_system_document_index'));
} else {
$response->setContent($this->renderView('admin/system/document/replace.html.twig', [
'form' => $form->createView(),
]));
return new HxRedirectResponse($this->generateUrl('app_admin_system_document_index'));
}
return $this->json($response);
return $this->render('admin/system/document/modal_replace.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -4,13 +4,13 @@ namespace App\Controller\Admin\System\Document;
use App\Entity\Upload;
use App\Entity\User;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use App\Service\Upload\UploadHandler;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -25,13 +25,10 @@ class UploadController extends AbstractController
#[Route('/admin/system/document/upload', name: 'app_admin_system_document_upload')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
public function index(Request $request): JsonResponse
public function index(Request $request): Response
{
$response = new AjaxModalResponseDto();
$formAction = $this->generateUrl('app_admin_system_document_upload');
$form = $this
->createFormBuilder(null, ['action' => $formAction, 'ajax_submit' => true])
->createFormBuilder()
->getForm()
;
$form->handleRequest($request);
@@ -53,7 +50,8 @@ class UploadController extends AbstractController
}
if ($form->isSubmitted() && $form->isValid()) {
$this->addFlash('success', 'Das/die Dokument/e wurden hochgeladen');
$count = count($uploadedDocuments);
$this->addFlash('success', $count === 1 ? 'Das Dokument wurde hochgeladen' : 'Die Dokumente wurden hochgeladen');
$loggerContext = [];
foreach ($uploadedDocuments as $document) {
$loggerContext[] = [
@@ -63,13 +61,11 @@ class UploadController extends AbstractController
}
$this->logger->info('Upload document(s)', $loggerContext);
$response->setCloseAndRedirect($this->generateUrl('app_admin_system_document_index'));
} else {
$response->setContent($this->renderView('admin/system/document/upload.html.twig', [
'form' => $form->createView(),
]));
return new HxRedirectResponse($this->generateUrl('app_admin_system_document_index'));
}
return $this->json($response);
return $this->render('admin/system/document/modal_upload.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -3,9 +3,11 @@
namespace App\Controller\Admin\System\Faq;
use App\Entity\Faq;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -18,19 +20,25 @@ class DeleteController extends AbstractController
) {
}
#[Route('/admin/system/faq/delete/{id}', name: 'app_admin_system_faq_delete', methods: ['POST'])]
#[Route('/admin/system/faq/delete/{id}', name: 'app_admin_system_faq_delete')]
#[IsGranted('ROLE_ADMIN')]
public function index(Faq $faq): Response
public function index(Faq $faq, Request $request): Response
{
$this->entityManager->remove($faq);
$this->entityManager->flush();
if (true === $request->isMethod('POST')) {
$this->entityManager->remove($faq);
$this->entityManager->flush();
$this->addFlash('success', 'Der FAQ-Eintrag wurde gelöscht');
$this->logger->info('Delete faq', [
'faq_id' => $faq->getId(),
'faq_question' => $faq->getQuestion(),
$this->addFlash('success', 'Der FAQ-Eintrag wurde gelöscht');
$this->logger->info('Delete faq', [
'faq_id' => $faq->getId(),
'faq_question' => $faq->getQuestion(),
]);
return new HxRedirectResponse($this->generateUrl('app_admin_system_faq_index'));
}
return $this->render('admin/system/faq/modal_delete.html.twig', [
'faq' => $faq,
]);
return $this->redirectToRoute('app_admin_system_faq_index');
}
}
@@ -4,12 +4,12 @@ namespace App\Controller\Admin\System\Fee;
use App\Entity\Fee;
use App\Form\FeeType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -23,13 +23,10 @@ class CreateController extends AbstractController
#[Route('/admin/system/fee/create', name: 'app_admin_system_fee_create')]
#[IsGranted('ROLE_ADMIN')]
public function index(Request $request): JsonResponse
public function index(Request $request): Response
{
$response = new AjaxModalResponseDto();
$action = $this->generateUrl('app_admin_system_fee_create');
$fee = new Fee();
$form = $this->createForm(FeeType::class, $fee, ['action' => $action, 'ajax_submit' => true]);
$form = $this->createForm(FeeType::class, $fee);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -42,15 +39,11 @@ class CreateController extends AbstractController
'fee_name' => $fee->getNameInternal() ?? $fee->getName(),
]);
$redirectUrl = $this->generateUrl('app_admin_system_fee_index');
$response->setCloseAndRedirect($redirectUrl);
} else {
$content = $this->renderView('admin/system/fee/form.html.twig', [
'form' => $form
]);
$response->setContent($content);
return new HxRedirectResponse($this->generateUrl('app_admin_system_fee_index'));
}
return $this->json($response);
return $this->render('admin/system/fee/modal_create.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -3,9 +3,11 @@
namespace App\Controller\Admin\System\Fee;
use App\Entity\Fee;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -18,19 +20,25 @@ class DeleteController extends AbstractController
) {
}
#[Route('/admin/system/fee/delete/{id}', name: 'app_admin_system_fee_delete', methods: ['POST'])]
#[Route('/admin/system/fee/delete/{id}', name: 'app_admin_system_fee_delete')]
#[IsGranted('ROLE_ADMIN')]
public function index(Fee $fee): Response
public function index(Fee $fee, Request $request): Response
{
$fee->setDeleted();
$this->entityManager->flush();
if (true === $request->isMethod('POST')) {
$fee->setDeleted();
$this->entityManager->flush();
$this->addFlash('success', 'Das Honorar wurde gelöscht');
$this->logger->info('Delete fee', [
'fee_id' => $fee->getId(),
'fee_name' => $fee->getNameInternal() ?? $fee->getName(),
$this->addFlash('success', 'Das Honorar wurde gelöscht');
$this->logger->info('Delete fee', [
'fee_id' => $fee->getId(),
'fee_name' => $fee->getNameInternal() ?? $fee->getName(),
]);
return new HxRedirectResponse($this->generateUrl('app_admin_system_fee_index'));
}
return $this->render('admin/system/fee/modal_delete.html.twig', [
'fee' => $fee,
]);
return $this->redirectToRoute('app_admin_system_fee_index');
}
}
@@ -4,12 +4,12 @@ namespace App\Controller\Admin\System\Fee;
use App\Entity\Fee;
use App\Form\FeeType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -23,14 +23,10 @@ class DuplicateController extends AbstractController
#[Route('/admin/system/fee/duplicate/{id}', name: 'app_admin_system_fee_duplicate')]
#[IsGranted('ROLE_ADMIN')]
public function index(Fee $fee, Request $request): JsonResponse
public function index(Fee $fee, Request $request): Response
{
$copy = Fee::duplicate($fee);
$response = new AjaxModalResponseDto();
$action = $this->generateUrl('app_admin_system_fee_duplicate', ['id' => $fee->getId()]);
$form = $this->createForm(FeeType::class, $copy, ['action' => $action, 'ajax_submit' => true]);
$form = $this->createForm(FeeType::class, $copy);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -45,15 +41,11 @@ class DuplicateController extends AbstractController
'duplicate_name' => $copy->getNameInternal() ?? $copy->getName(),
]);
$redirectUrl = $this->generateUrl('app_admin_system_fee_index');
$response->setCloseAndRedirect($redirectUrl);
} else {
$content = $this->renderView('admin/system/fee/form.html.twig', [
'form' => $form
]);
$response->setContent($content);
return new HxRedirectResponse($this->generateUrl('app_admin_system_fee_index'));
}
return $this->json($response);
return $this->render('admin/system/fee/modal_duplicate.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -4,12 +4,12 @@ namespace App\Controller\Admin\System\Fee;
use App\Entity\Fee;
use App\Form\FeeType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -23,12 +23,9 @@ class EditController extends AbstractController
#[Route('/admin/system/fee/edit/{id}', name: 'app_admin_system_fee_edit')]
#[IsGranted('ROLE_ADMIN')]
public function index(Fee $fee, Request $request): JsonResponse
public function index(Fee $fee, Request $request): Response
{
$response = new AjaxModalResponseDto();
$action = $this->generateUrl('app_admin_system_fee_edit', ['id' => $fee->getId()]);
$form = $this->createForm(FeeType::class, $fee, ['action' => $action, 'ajax_submit' => true]);
$form = $this->createForm(FeeType::class, $fee);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -40,15 +37,11 @@ class EditController extends AbstractController
'fee_name' => $fee->getNameInternal() ?? $fee->getName(),
]);
$redirectUrl = $this->generateUrl('app_admin_system_fee_index');
$response->setCloseAndRedirect($redirectUrl);
} else {
$content = $this->renderView('admin/system/fee/form.html.twig', [
'form' => $form
]);
$response->setContent($content);
return new HxRedirectResponse($this->generateUrl('app_admin_system_fee_index'));
}
return $this->json($response);
return $this->render('admin/system/fee/modal_edit.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -3,9 +3,11 @@
namespace App\Controller\Admin\System\FeedbackSet;
use App\Entity\FeedbackSet;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -18,20 +20,26 @@ class DeleteController extends AbstractController
) {
}
#[Route('/admin/system/feedback-set/delete/{id}', name: 'app_admin_system_feedback_set_delete', methods: ['POST'])]
#[Route('/admin/system/feedback-set/delete/{id}', name: 'app_admin_system_feedback_set_delete')]
#[IsGranted('ROLE_ADMIN')]
#[IsGranted('DELETE', subject: 'feedbackSet')]
public function index(FeedbackSet $feedbackSet): Response
public function index(FeedbackSet $feedbackSet, Request $request): Response
{
$this->entityManager->remove($feedbackSet);
$this->entityManager->flush();
if (true === $request->isMethod('POST')) {
$this->entityManager->remove($feedbackSet);
$this->entityManager->flush();
$this->addFlash('success', 'Die Feedback-Vorlage wurde gelöscht');
$this->logger->info('Delete feedback set', [
'feedback_set_id' => $feedbackSet->getId(),
'feedback_set_name' => $feedbackSet->getName(),
$this->addFlash('success', 'Die Feedback-Vorlage wurde gelöscht');
$this->logger->info('Delete feedback set', [
'feedback_set_id' => $feedbackSet->getId(),
'feedback_set_name' => $feedbackSet->getName(),
]);
return new HxRedirectResponse($this->generateUrl('app_admin_system_feedback_set_index'));
}
return $this->render('admin/system/feedback_set/modal_delete.html.twig', [
'feedbackSet' => $feedbackSet,
]);
return $this->redirectToRoute('app_admin_system_feedback_set_index');
}
}
@@ -3,9 +3,11 @@
namespace App\Controller\Admin\System\JobProfile;
use App\Entity\JobProfile;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -18,19 +20,25 @@ class DeleteController extends AbstractController
) {
}
#[Route('/admin/system/job-profile/delete/{id}', name: 'app_admin_system_job_profile_delete', methods: ['POST'])]
#[Route('/admin/system/job-profile/delete/{id}', name: 'app_admin_system_job_profile_delete')]
#[IsGranted('ROLE_ADMIN')]
public function index(JobProfile $jobProfile): Response
public function index(JobProfile $jobProfile, Request $request): Response
{
$jobProfile->setDeleted();
$this->entityManager->flush();
if (true === $request->isMethod('POST')) {
$jobProfile->setDeleted();
$this->entityManager->flush();
$this->addFlash('success', 'Das Job-Profil wurde gelöscht');
$this->logger->info('Delete job-profile', [
'job_profile_id' => $jobProfile->getId(),
'job_profile_name' => $jobProfile->getName(),
$this->addFlash('success', 'Das Job-Profil wurde gelöscht');
$this->logger->info('Delete job-profile', [
'job_profile_id' => $jobProfile->getId(),
'job_profile_name' => $jobProfile->getName(),
]);
return new HxRedirectResponse($this->generateUrl('app_admin_system_job_profile_index'));
}
return $this->render('admin/system/job_profile/modal_delete.html.twig', [
'jobProfile' => $jobProfile,
]);
return $this->redirectToRoute('app_admin_system_job_profile_index');
}
}
@@ -4,12 +4,12 @@ namespace App\Controller\Admin\System\Training;
use App\Entity\Training;
use App\Form\TrainingType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -23,13 +23,10 @@ class CreateController extends AbstractController
#[Route('/admin/system/training/create', name: 'app_admin_system_training_create')]
#[IsGranted('ROLE_ADMIN')]
public function index(Request $request): JsonResponse
public function index(Request $request): Response
{
$response = new AjaxModalResponseDto();
$action = $this->generateUrl('app_admin_system_training_create');
$training = new Training();
$form = $this->createForm(TrainingType::class, $training, ['action' => $action, 'ajax_submit' => true]);
$form = $this->createForm(TrainingType::class, $training);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -42,15 +39,11 @@ class CreateController extends AbstractController
'training_name' => $training->getName(),
]);
$redirectUrl = $this->generateUrl('app_admin_system_training_index');
$response->setCloseAndRedirect($redirectUrl);
} else {
$content = $this->renderView('admin/system/training/form.html.twig', [
'form' => $form
]);
$response->setContent($content);
return new HxRedirectResponse($this->generateUrl('app_admin_system_training_index'));
}
return $this->json($response);
return $this->render('admin/system/training/modal_create.hml.twig', [
'form' => $form->createView(),
]);
}
}
@@ -3,9 +3,11 @@
namespace App\Controller\Admin\System\Training;
use App\Entity\Training;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -18,19 +20,25 @@ class DeleteController extends AbstractController
) {
}
#[Route('/admin/system/training/delete/{id}', name: 'app_admin_system_training_delete', methods: ['POST'])]
#[Route('/admin/system/training/delete/{id}', name: 'app_admin_system_training_delete')]
#[IsGranted('ROLE_ADMIN')]
public function index(Training $training): Response
public function index(Training $training, Request $request): Response
{
$training->setDeleted();
$this->entityManager->flush();
if (true === $request->isMethod('POST')) {
$training->setDeleted();
$this->entityManager->flush();
$this->addFlash('success', 'Die Fortbildung wurde gelöscht');
$this->logger->info('Delete training', [
'training_id' => $training->getId(),
'training_name' => $training->getName(),
$this->addFlash('success', 'Die Fortbildung wurde gelöscht');
$this->logger->info('Delete training', [
'training_id' => $training->getId(),
'training_name' => $training->getName(),
]);
return new HxRedirectResponse($this->generateUrl('app_admin_system_training_index'));
}
return $this->render('admin/system/training/modal_delete.html.twig', [
'training' => $training,
]);
return $this->redirectToRoute('app_admin_system_training_index');
}
}
@@ -4,12 +4,12 @@ namespace App\Controller\Admin\System\Training;
use App\Entity\Training;
use App\Form\TrainingType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -23,12 +23,9 @@ class EditController extends AbstractController
#[Route('/admin/system/training/edit/{id}', name: 'app_admin_system_training_edit')]
#[IsGranted('ROLE_ADMIN')]
public function index(Training $training, Request $request): JsonResponse
public function index(Training $training, Request $request): Response
{
$response = new AjaxModalResponseDto();
$action = $this->generateUrl('app_admin_system_training_edit', ['id' => $training->getId()]);
$form = $this->createForm(TrainingType::class, $training, ['action' => $action, 'ajax_submit' => true]);
$form = $this->createForm(TrainingType::class, $training);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -40,15 +37,11 @@ class EditController extends AbstractController
'training_name' => $training->getName(),
]);
$redirectUrl = $this->generateUrl('app_admin_system_training_index');
$response->setCloseAndRedirect($redirectUrl);
} else {
$content = $this->renderView('admin/system/training/form.html.twig', [
'form' => $form
]);
$response->setContent($content);
return new HxRedirectResponse($this->generateUrl('app_admin_system_training_index'));
}
return $this->json($response);
return $this->render('admin/system/training/modal_edit.hml.twig', [
'form' => $form->createView(),
]);
}
}
@@ -5,6 +5,7 @@ namespace App\Controller\Admin\Teamer\Availability;
use App\Controller\Traits\ReturnUrlTrait;
use App\Entity\Availability;
use App\Entity\Teamer;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bridge\Doctrine\Attribute\MapEntity;
@@ -33,24 +34,30 @@ class DeleteController extends AbstractController
Availability $availability,
Request $request
): Response {
if (null === $availability->getOwner()) {
$teamer->removeAvailability($availability);
} elseif ($teamer === $availability->getOwner()) {
$this->entityManager->remove($availability);
if (true === $request->isMethod('POST')) {
if (null === $availability->getOwner()) {
$teamer->removeAvailability($availability);
} elseif ($teamer === $availability->getOwner()) {
$this->entityManager->remove($availability);
}
$this->entityManager->flush();
$this->addFlash('success', 'Der Zeitraum wurde entfernt/gelöscht.');
$this->logger->info('Delete teamer availability', [
'availability_id' => $availability->getId(),
'availability_range' => (string) $availability,
'teamer_id' => $teamer->getId(),
'teamer_name' => (string) $teamer,
]);
$redirectUrl = $this->getReturnUrl($request, 'app_admin_teamer_profile', ['uuid' => $teamer->getUuid()]);
return new HxRedirectResponse($redirectUrl);
}
$this->entityManager->flush();
$this->addFlash('success', 'Der Zeitraum wurde entfernt/gelöscht.');
$this->logger->info('Delete teamer availability', [
'availability_id' => $availability->getId(),
'availability_range' => (string) $availability,
'teamer_id' => $teamer->getId(),
'teamer_name' => (string) $teamer,
return $this->render('admin/teamer/availability/modal_delete.html.twig', [
'availability' => $availability,
]);
$redirectUrl = $this->getReturnUrl($request, 'app_admin_teamer_profile', ['uuid' => $teamer->getUuid()]);
return $this->redirect($redirectUrl);
}
}
@@ -1,6 +1,6 @@
<?php
namespace App\Controller\Admin\Teamer;
namespace App\Controller\Admin\Teamer\Availability;
use App\Entity\Teamer;
use App\Service\Teamer\AvailabilityProcessor;
@@ -9,7 +9,7 @@ use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class AvailabilityController extends AbstractController
class IndexController extends AbstractController
{
#[Route('/admin/teamer/availability/{uuid}', name: 'app_admin_teamer_availability')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
@@ -19,7 +19,7 @@ class AvailabilityController extends AbstractController
$availabilities = $teamer->getAvailabilities()->toArray();
$groupedAvailabilities = $processor->groupRecords($availabilities);
return $this->render('admin/teamer/availability.html.twig', [
return $this->render('admin/teamer/availability/index.html.twig', [
'teamer' => $teamer,
'groupedAvailabilities' => $groupedAvailabilities,
]);
@@ -3,10 +3,9 @@
namespace App\Controller\Admin\Teamer;
use App\Entity\Teamer;
use App\Model\AjaxModalResponseDto;
use App\Repository\DispositionRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class InfoController extends AbstractController
@@ -15,16 +14,13 @@ class InfoController extends AbstractController
{}
#[Route('/admin/teamer/info/{uuid}', name: 'app_admin_teamer_info')]
public function index(Teamer $teamer): JsonResponse
public function index(Teamer $teamer): Response
{
$recentDispositions = $this->dispositionRepository->findRecentDispositionsByTeamer($teamer);
$response = new AjaxModalResponseDto();
$response->setContent($this->renderView('admin/teamer/info.html.twig', [
return $this->render('admin/teamer/modal_info.html.twig', [
'teamer' => $teamer,
'recentDispositions' => $recentDispositions,
]));
return $this->json($response);
]);
}
}
@@ -6,14 +6,13 @@ use App\Entity\Teamer;
use App\Entity\Training;
use App\Entity\TrainingAttendance;
use App\Form\AbbreviatedDateType;
use App\Form\FeeType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bridge\Doctrine\Attribute\MapEntity;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -33,13 +32,7 @@ class CreateController extends AbstractController
#[MapEntity(mapping: ['teamer_id' => 'id'])]
Teamer $teamer,
Request $request
): JsonResponse {
$response = new AjaxModalResponseDto();
$action = $this->generateUrl('app_admin_teamer_skills_training_attendance_create', [
'training_id' => $training->getId(),
'teamer_id' => $teamer->getId(),
]);
): Response {
$attendance = new TrainingAttendance();
$attendance
->setTeamer($teamer)
@@ -47,7 +40,7 @@ class CreateController extends AbstractController
;
$form = $this
->createFormBuilder($attendance, ['action' => $action, 'ajax_submit' => true])
->createFormBuilder($attendance)
->add('date', AbbreviatedDateType::class, [
'label' => 'Datum',
])
@@ -69,14 +62,12 @@ class CreateController extends AbstractController
]);
$redirectUrl = $this->generateUrl('app_admin_teamer_skills', ['uuid' => $teamer->getUuid()]);
$response->setCloseAndRedirect($redirectUrl);
} else {
$content = $this->renderView('admin/teamer/training_attendance/create.html.twig', [
'form' => $form
]);
$response->setContent($content);
return new HxRedirectResponse($redirectUrl);
}
return $this->json($response);
return $this->render('admin/teamer/training_attendance/modal_create.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -3,9 +3,11 @@
namespace App\Controller\Admin\Teamer\TrainingAttendance;
use App\Entity\TrainingAttendance;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -18,24 +20,32 @@ class DeleteController extends AbstractController
) {
}
#[Route('/admin/teamer/skills/training-attendance/delete/{uuid}', name: 'app_admin_teamer_skills_training_attendance_delete', methods: ['POST'])]
#[Route('/admin/teamer/skills/training-attendance/delete/{uuid}', name: 'app_admin_teamer_skills_training_attendance_delete')]
#[IsGranted('ROLE_ADMIN')]
public function index(TrainingAttendance $attendance): Response
public function index(TrainingAttendance $attendance, Request $request): Response
{
$teamer = $attendance->getTeamer();
if (true === $request->isMethod('POST')) {
$teamer = $attendance->getTeamer();
$this->entityManager->remove($attendance);
$this->entityManager->flush();
$this->entityManager->remove($attendance);
$this->entityManager->flush();
$this->addFlash('success', 'Die Teilnahme an der Fortbilundg wurde gelöscht');
$this->logger->info('Delete training attendance', [
'attendance_id' => $attendance->getId(),
'teamer_id' => $teamer->getId(),
'teamer_name' => (string) $teamer,
'training_id' => $attendance->getTraining()->getId(),
'training_name' => $attendance->getTraining()->getName(),
$this->addFlash('success', 'Die Teilnahme an der Fortbilundg wurde gelöscht');
$this->logger->info('Delete training attendance', [
'attendance_id' => $attendance->getId(),
'teamer_id' => $teamer->getId(),
'teamer_name' => (string) $teamer,
'training_id' => $attendance->getTraining()->getId(),
'training_name' => $attendance->getTraining()->getName(),
]);
return new HxRedirectResponse($this->generateUrl('app_admin_teamer_skills', [
'uuid' => $teamer->getUuid(),
]));
}
return $this->render('admin/teamer/training_attendance/modal_delete.html.twig', [
'attendance' => $attendance,
]);
return $this->redirectToRoute('app_admin_teamer_skills', ['uuid' => $teamer->getUuid()]);
}
}
@@ -4,11 +4,10 @@ namespace App\Controller\Common;
use App\Controller\Traits\ReturnUrlTrait;
use App\Form\AssignmentFilterType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use App\Repository\AssignmentRepository;
use App\Service\Common\AssignmentFilterHandler;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
@@ -26,15 +25,11 @@ class AssignmentFilterController extends AbstractController
#[Route('/common/assignment/filter', name: 'app_common_assignment_filter')]
#[IsGranted('ROLE_USER')]
public function index(Request $request): JsonResponse
public function index(Request $request): Response
{
$response = new AjaxModalResponseDto();
$formAction = $this->generateUrl('app_common_assignment_filter', ['r' => $request->query->get('r')]);
$formData = $this->filterHandler->getFilterSettings();
$filterOptions = $this->assignmentRepository->getFilterOptions();
$formOptions = [
'action' => $formAction,
'ajax_submit' => true,
'min_date' => $filterOptions['minDate'],
'max_date' => $filterOptions['maxDate'],
'job_profiles' => $filterOptions['jobProfiles'],
@@ -47,15 +42,14 @@ class AssignmentFilterController extends AbstractController
if ($form->isSubmitted() && $form->isValid()) {
$this->filterHandler->handleRequest($form);
$returnUrl = $this->getReturnUrl($request, 'app_admin_assignment_index');
$response->setCloseAndRedirect($returnUrl);
} else {
$response->setContent($this->renderView('common/assignment_filter.html.twig', [
'filterForm' => $form,
'filterDto' => $form->getData(),
]));
return new HxRedirectResponse($returnUrl);
}
return $this->json($response);
return $this->render('common/modal_assignment_filter.html.twig', [
'filterForm' => $form->createView(),
'filterDto' => $form->getData(),
]);
}
#[Route('/common/assignment/filter/reset', name: 'app_common_assignment_filter_reset')]
@@ -4,11 +4,10 @@ namespace App\Controller\Common;
use App\Controller\Traits\ReturnUrlTrait;
use App\Form\TeamerFilterType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use App\Repository\TeamerRepository;
use App\Service\Common\TeamerFilterHandler;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
@@ -26,29 +25,23 @@ class TeamerFilterController extends AbstractController
#[Route('/common/teamer/filter', name: 'app_common_teamer_filter')]
#[IsGranted('ROLE_USER')]
public function index(Request $request): JsonResponse
public function index(Request $request): Response
{
$response = new AjaxModalResponseDto();
$formAction = $this->generateUrl('app_common_teamer_filter', ['r' => $request->query->get('r')]);
$formData = $this->filterHandler->getFilterSettings();
$form = $this->createForm(TeamerFilterType::class, $formData, [
'action' => $formAction,
'ajax_submit' => true,
]);
$form = $this->createForm(TeamerFilterType::class, $formData);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->filterHandler->handleRequest($form);
$returnUrl = $this->getReturnUrl($request, 'app_admin_teamer_index');
$response->setCloseAndRedirect($returnUrl);
} else {
$response->setContent($this->renderView('common/teamer_filter.html.twig', [
'filterForm' => $form,
'filterDto' => $form->getData(),
]));
return new HxRedirectResponse($returnUrl);
}
return $this->json($response);
return $this->render('common/modal_teamer_filter.html.twig', [
'filterForm' => $form->createView(),
'filterDto' => $form->getData(),
]);
}
#[Route('/common/teamer/filter/reset', name: 'app_common_teamer_filter_reset')]
@@ -5,6 +5,7 @@ namespace App\Controller\Teamer\Application;
use App\Controller\Traits\ReturnUrlTrait;
use App\Entity\Application;
use App\Entity\User;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
@@ -27,24 +28,28 @@ class WithdrawController extends AbstractController
#[IsGranted('WITHDRAW', subject: 'application')]
public function index(Application $application, Request $request): Response
{
/** @var User $user */
$user = $this->getUser();
$teamer = $user->getTeamer();
$assignment = $application->getAssignment();
if (true === $request->isMethod('POST')) {
/** @var User $user */
$user = $this->getUser();
$teamer = $user->getTeamer();
$assignment = $application->getAssignment();
$this->entityManager->remove($application);
$this->entityManager->flush();
$this->entityManager->remove($application);
$this->entityManager->flush();
$this->logger->info('Withdraw application', [
'teamer_id' => $teamer->getId(),
'teamer_name' => (string) $teamer,
'application_id' => $application->getId(),
'assignment_id' => $assignment->getId(),
'destination' => (string) $assignment->getDestination(),
$this->logger->info('Withdraw application', [
'teamer_id' => $teamer->getId(),
'teamer_name' => (string) $teamer,
'application_id' => $application->getId(),
'assignment_id' => $assignment->getId(),
'destination' => (string) $assignment->getDestination(),
]);
return new HxRedirectResponse($this->getReturnUrl($request, 'app_teamer_index'));
}
return $this->render('teamer/application/modal_withdraw.html.twig', [
'application' => $application,
]);
$returnUrl = $this->getReturnUrl($request, 'app_teamer_index');
return $this->redirect($returnUrl);
}
}
+4 -8
View File
@@ -3,9 +3,8 @@
namespace App\Controller\Teamer;
use App\Entity\Feedback;
use App\Model\AjaxModalResponseDto;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -13,13 +12,10 @@ class FeedbackController extends AbstractController
{
#[Route('/teamer/feedback/{uuid}', name: 'app_teamer_feedback')]
#[IsGranted('VIEW', subject: 'feedback')]
public function index(Feedback $feedback): JsonResponse
public function index(Feedback $feedback): Response
{
$response = new AjaxModalResponseDto();
$response->setContent($this->renderView('teamer/feedback/index.html.twig', [
return $this->render('teamer/feedback/modal.html.twig', [
'feedback' => $feedback,
]));
return $this->json($response);
]);
}
}
@@ -5,12 +5,12 @@ namespace App\Controller\Teamer\Profile\Availability;
use App\Entity\Availability;
use App\Entity\User;
use App\Form\AvailabilityType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -24,14 +24,11 @@ class CreateController extends AbstractController
#[Route('/teamer/profile/availability/create', name: 'app_teamer_profile_availability_create')]
#[IsGranted('ROLE_TEAMER')]
public function index(Request $request): JsonResponse
public function index(Request $request): Response
{
$response = new AjaxModalResponseDto();
$action = $this->generateUrl('app_teamer_profile_availability_create');
$availability = new Availability();
$form = $this->createForm(AvailabilityType::class, $availability, ['action' => $action, 'ajax_submit' => true]);
$form = $this->createForm(AvailabilityType::class, $availability);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -53,15 +50,11 @@ class CreateController extends AbstractController
'availability' => (string) $availability,
]);
$redirectUrl = $this->generateUrl('app_teamer_profile_availability_index');
$response->setCloseAndRedirect($redirectUrl);
} else {
$content = $this->renderView('teamer/profile/availability/create.html.twig', [
'form' => $form,
]);
$response->setContent($content);
return new HxRedirectResponse($this->generateUrl('app_teamer_profile_availability_index'));
}
return $this->json($response);
return $this->render('teamer/profile/availability/modal_create.html.twig', [
'form' => $form->createView(),
]);
}
}
@@ -4,9 +4,11 @@ namespace App\Controller\Teamer\Profile\Availability;
use App\Entity\Availability;
use App\Entity\User;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -21,27 +23,33 @@ class DeleteController extends AbstractController
#[Route('/teamer/profile/availability/delete/{id}', name: 'app_teamer_profile_availability_delete')]
#[IsGranted('DELETE', subject: 'availability')]
public function index(Availability $availability): Response
public function index(Availability $availability, Request $request): Response
{
/** @var User $user */
$user = $this->getUser();
$teamer = $user->getTeamer();
if (true === $request->isMethod('POST')) {
/** @var User $user */
$user = $this->getUser();
$teamer = $user->getTeamer();
if (null === $availability->getOwner()) {
$teamer->removeAvailability($availability);
} elseif ($teamer === $availability->getOwner()) {
$this->entityManager->remove($availability);
if (null === $availability->getOwner()) {
$teamer->removeAvailability($availability);
} elseif ($teamer === $availability->getOwner()) {
$this->entityManager->remove($availability);
}
$this->entityManager->flush();
$this->addFlash('success', 'Der Zeitraum wurde entfernt/gelöscht.');
$this->logger->info('Delete availability', [
'teamer_id' => $teamer->getId(),
'teamer_name' => (string) $teamer,
'availability' => (string) $availability,
]);
return new HxRedirectResponse($this->generateUrl('app_teamer_profile_availability_index'));
}
$this->entityManager->flush();
$this->addFlash('success', 'Der Zeitraum wurde entfernt/gelöscht.');
$this->logger->info('Delete availability', [
'teamer_id' => $teamer->getId(),
'teamer_name' => (string) $teamer,
'availability' => (string) $availability,
return $this->render('teamer/profile/availability/modal_delete.html.twig', [
'availability' => $availability,
]);
return $this->redirectToRoute('app_teamer_profile_availability_index');
}
}
@@ -6,14 +6,14 @@ use App\Entity\License;
use App\Entity\Upload;
use App\Entity\User;
use App\Form\LicenseType;
use App\Model\AjaxModalResponseDto;
use App\Htmx\HxRedirectResponse;
use App\Model\UploadSessionDto;
use App\Service\Upload\UploadHandler;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -28,11 +28,8 @@ class AddController extends AbstractController
#[Route('/teamer/profile/license/add', name: 'app_teamer_profile_license_add')]
#[IsGranted('ROLE_TEAMER')]
public function index(Request $request): JsonResponse
public function index(Request $request): Response
{
$response = new AjaxModalResponseDto();
$action = $this->generateUrl('app_teamer_profile_license_add');
/** @var User $user */
$user = $this->getUser();
$license = new License();
@@ -43,15 +40,7 @@ class AddController extends AbstractController
$this->updateCertificate($user, $license, $uploadSession);
}
$form = $this->createForm(
LicenseType::class,
$license,
[
'action' => $action,
'ajax_submit' => true,
'upload_session' => $uploadSession,
]
);
$form = $this->createForm(LicenseType::class, $license, ['upload_session' => $uploadSession]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
@@ -69,16 +58,12 @@ class AddController extends AbstractController
'license_type' => $license->getType(),
]);
$redirectUrl = $this->generateUrl('app_teamer_profile_skills');
$response->setCloseAndRedirect($redirectUrl);
} else {
$content = $this->renderView('teamer/profile/license/add.html.twig', [
'form' => $form,
]);
$response->setContent($content);
return new HxRedirectResponse($this->generateUrl('app_teamer_profile_skills'));
}
return $this->json($response);
return $this->render('teamer/profile/license/modal_add.html.twig', [
'form' => $form->createView(),
]);
}
private function updateCertificate(User $user, License $license, UploadSessionDto $uploadSession): void
@@ -3,9 +3,11 @@
namespace App\Controller\Teamer\Profile\License;
use App\Entity\License;
use App\Htmx\HxRedirectResponse;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
@@ -20,20 +22,26 @@ class DeleteController extends AbstractController
#[Route('//teamer/profile/license/delete/{uuid}', name: 'app_teamer_profile_license_delete')]
#[IsGranted('DELETE', subject: 'license')]
public function index(License $license): Response
public function index(License $license, Request $request): Response
{
$teamer = $license->getTeamer();
if (true === $request->isMethod('POST')) {
$teamer = $license->getTeamer();
$this->entityManager->remove($license);
$this->entityManager->flush();
$this->entityManager->remove($license);
$this->entityManager->flush();
$this->addFlash('success', 'Die Lizenz wurde gelöscht.');
$this->logger->info('Delete license', [
'teamer_id' => $teamer->getId(),
'teamer_name' => (string) $teamer,
'license_type' => $license->getType(),
$this->addFlash('success', 'Die Lizenz wurde gelöscht.');
$this->logger->info('Delete license', [
'teamer_id' => $teamer->getId(),
'teamer_name' => (string) $teamer,
'license_type' => $license->getType(),
]);
return new HxRedirectResponse($this->generateUrl('app_teamer_profile_skills'));
}
return $this->render('teamer/profile/license/modal_delete.html.twig', [
'license' => $license,
]);
return $this->redirectToRoute('app_teamer_profile_skills');
}
}