WIP: Implement CRUD, improve menu configuration

This commit is contained in:
Björn Fromme
2023-09-27 17:50:42 +02:00
parent c55fd85314
commit c528156959
43 changed files with 2187 additions and 3475 deletions
@@ -0,0 +1,16 @@
<?php
namespace App\Controller\Admin\Application;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class IndexController extends AbstractController
{
#[Route('/admin/application', name: 'app_admin_application_index')]
public function index(): Response
{
return $this->render('admin/application/index.html.twig');
}
}
@@ -0,0 +1,16 @@
<?php
namespace App\Controller\Admin\Assignment;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class IndexController extends AbstractController
{
#[Route('/admin/assignment', name: 'app_admin_assignment_index')]
public function index(): Response
{
return $this->render('admin/assignment/index.html.twig');
}
}
@@ -0,0 +1,16 @@
<?php
namespace App\Controller\Admin\Document;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class IndexController extends AbstractController
{
#[Route('/admin/document', name: 'app_admin_document_index')]
public function index(): Response
{
return $this->render('admin/document/index.html.twig');
}
}
@@ -0,0 +1,47 @@
<?php
namespace App\Controller\Admin\System\Faq;
use App\Entity\Faq;
use App\Form\FaqType;
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\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class CreateController extends AbstractController
{
public function __construct(
private readonly EntityManagerInterface $entityManager,
private readonly LoggerInterface $logger
) {
}
#[Route('/admin/system/faq/create', name: 'app_admin_system_faq_create')]
#[IsGranted('ROLE_ADMIN')]
public function index(Request $request): Response
{
$faq = new Faq();
$form = $this->createForm(FaqType::class, $faq);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->entityManager->persist($faq);
$this->entityManager->flush();
$this->addFlash('success', 'Der FAQ-Eintrag wurde angelegt');
$this->logger->info('Create faq', [
'faq' => $faq->getQuestion(),
]);
return $this->redirectToRoute('app_admin_system_faq_index');
}
return $this->render('admin/system/faq/create.html.twig', [
'form' => $form
]);
}
}
@@ -0,0 +1,35 @@
<?php
namespace App\Controller\Admin\System\Faq;
use App\Entity\Faq;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class DeleteController extends AbstractController
{
public function __construct(
private readonly EntityManagerInterface $entityManager,
private readonly LoggerInterface $logger
) {
}
#[Route('/admin/system/faq/delete/{id}', name: 'app_admin_system_faq_delete', methods: ['POST'])]
#[IsGranted('ROLE_ADMIN')]
public function index(Faq $faq): Response
{
$this->entityManager->remove($faq);
$this->entityManager->flush();
$this->addFlash('success', 'Der FAQ-Eintrag wurde gelöscht');
$this->logger->info('Delete faq', [
'faq' => $faq->getQuestion(),
]);
return $this->redirectToRoute('app_admin_system_faq_index');
}
}
@@ -0,0 +1,45 @@
<?php
namespace App\Controller\Admin\System\Faq;
use App\Entity\Faq;
use App\Form\FaqType;
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\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class EditController extends AbstractController
{
public function __construct(
private readonly EntityManagerInterface $entityManager,
private readonly LoggerInterface $logger
) {
}
#[Route('/admin/system/faq/edit/{id}', name: 'app_admin_system_faq_edit')]
#[IsGranted('ROLE_ADMIN')]
public function index(Faq $faq, Request $request): Response
{
$form = $this->createForm(FaqType::class, $faq);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->entityManager->flush();
$this->addFlash('success', 'Der FAQ-Eintrag wurde aktualisiert');
$this->logger->info('Edit faq', [
'faq' => $faq->getQuestion(),
]);
return $this->redirectToRoute('app_admin_system_faq_index');
}
return $this->render('admin/system/faq/edit.html.twig', [
'form' => $form
]);
}
}
@@ -0,0 +1,54 @@
<?php
namespace App\Controller\Admin\System\Faq;
use App\Entity\Faq;
use App\Repository\FaqRepository;
use Doctrine\ORM\EntityManagerInterface;
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\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class IndexController extends AbstractController
{
public function __construct(
private readonly FaqRepository $faqRepository,
private readonly EntityManagerInterface $entityManager
) {
}
#[Route('/admin/system/faq', name: 'app_admin_system_faq_index')]
#[IsGranted('ROLE_ADMIN')]
public function index(): Response
{
$faqs = $this->faqRepository->findBy([], ['sorting' => 'ASC']);
return $this->render('admin/system/faq/index.html.twig', [
'faqs' => $faqs,
]);
}
#[Route('/admin/system/faq/sort', name: 'app_admin_system_faq_sort', methods: ['POST'])]
public function sort(Request $request): JsonResponse
{
$data = json_decode($request->getContent(), true);
$ordering = $data['ordering'];
$faqIds = array_keys($ordering);
$faqs = $this
->faqRepository
->findBy(['id' => $faqIds])
;
foreach ($faqs as $faq) {
/* @var Faq $faq */
$faq->setSorting($ordering[$faq->getId()]);
}
$this->entityManager->flush();
return $this->json([
'success' => true,
]);
}
}
@@ -32,7 +32,7 @@ class EditController extends AbstractController
$this->entityManager->flush();
$this->addFlash('success', 'Das Honorar wurde aktualisiert');
$this->logger->info('Update fee', [
$this->logger->info('Edit fee', [
'fee' => $fee->getName(),
]);
@@ -0,0 +1,35 @@
<?php
namespace App\Controller\Admin\System\JobProfile;
use App\Entity\JobProfile;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class DeleteController extends AbstractController
{
public function __construct(
private readonly EntityManagerInterface $entityManager,
private readonly LoggerInterface $logger
) {
}
#[Route('/admin/system/job-profile/delete/{id}', name: 'app_admin_system_job_profile_delete', methods: ['POST'])]
#[IsGranted('ROLE_ADMIN')]
public function index(JobProfile $jobProfile): Response
{
$this->entityManager->remove($jobProfile);
$this->entityManager->flush();
$this->addFlash('success', 'Das Job-Profil wurde gelöscht');
$this->logger->info('Delete job-profile', [
'job_profile' => $jobProfile->getName(),
]);
return $this->redirectToRoute('app_admin_system_job_profile_index');
}
}
@@ -0,0 +1,45 @@
<?php
namespace App\Controller\Admin\System\JobProfile;
use App\Entity\JobProfile;
use App\Form\JobProfileType;
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\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class EditController extends AbstractController
{
public function __construct(
private readonly EntityManagerInterface $entityManager,
private readonly LoggerInterface $logger
) {
}
#[Route('/admin/system/job-profile/edit/{id}', name: 'app_admin_system_job_profile_edit')]
#[IsGranted('ROLE_ADMIN')]
public function index(JobProfile $jobProfile, Request $request): Response
{
$form = $this->createForm(JobProfileType::class, $jobProfile);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->entityManager->flush();
$this->addFlash('success', 'Das Job-Profil wurde aktualisiert');
$this->logger->info('Edit Job profile', [
'job_profile' => $jobProfile->getName(),
]);
return $this->redirectToRoute('app_admin_system_job_profile_index');
}
return $this->render('admin/system/job_profile/edit.html.twig', [
'form' => $form
]);
}
}
@@ -0,0 +1,35 @@
<?php
namespace App\Controller\Admin\System\Training;
use App\Entity\Training;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class DeleteController extends AbstractController
{
public function __construct(
private readonly EntityManagerInterface $entityManager,
private readonly LoggerInterface $logger
) {
}
#[Route('/admin/system/training/delete/{id}', name: 'app_admin_system_training_delete', methods: ['POST'])]
#[IsGranted('ROLE_ADMIN')]
public function index(Training $training): Response
{
$this->entityManager->remove($training);
$this->entityManager->flush();
$this->addFlash('success', 'Die Fortbildung wurde gelöscht');
$this->logger->info('Delete training', [
'training' => $training->getName(),
]);
return $this->redirectToRoute('app_admin_system_training_index');
}
}
@@ -31,7 +31,7 @@ class EditController extends AbstractController
$this->entityManager->flush();
$this->addFlash('success', 'Die Fortbildung wurde aktualisiert');
$this->logger->info('Update training', [
$this->logger->info('Edit training', [
'training' => $training->getName(),
]);
@@ -0,0 +1,19 @@
<?php
namespace App\Controller\Common\Assignment;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class CreateController extends AbstractController
{
#[Route('/assignment/create', name: 'app_common_assignment_create')]
#[IsGranted('ROLE_ADMINISTRATIVE')]
public function index(Request $request): Response
{
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace App\Controller\Teamer;
use App\Repository\FaqRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
class FaqController extends AbstractController
{
public function __construct(private readonly FaqRepository $faqRepository)
{}
#[Route('/teamer/faq', name: 'app_teamer_faq')]
#[IsGranted('ROLE_USER')]
public function index(): Response
{
$faqs = $this->faqRepository->findBy([], ['sorting' => 'ASC']);
return $this->render('teamer/faq.html.twig', [
'faqs' => $faqs,
]);
}
}