<?php
namespace App\Controller;
use App\Entity\{
Category,
Settings,
Rules,
Applications,
User,
LoginLogs
};
use App\Form\{
groupType,
categoryType
};
use Symfony\Component\Form\Extension\Core\Type\{
TextType,
TextareaType,
ChoiceType,
SubmitType
};
use App\Service\GroupPermissionsAccess;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Knp\Component\Pager\PaginatorInterface;
use Doctrine\ORM\EntityManagerInterface;
class AppsController extends AbstractController
{
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @Route("/apps", name="app_apps")
*/
public function cats(ManagerRegistry $doctrine, TranslatorInterface $translator): Response
{
$categories = $doctrine->getRepository(Category::class)->findBy(['enabled' => 1]);
$settingsRepo = $doctrine->getRepository(Settings::class);
return $this->render('frontend/pages/sites/apps/category.html.twig', [
'title' => $translator->trans('app.homepage') . ' :: ' . $settingsRepo->find(1)->getContent()['pageTitle'],
'pageTitle' => $translator->trans('app.applist'),
'breadcrumb' => [
[$translator->trans('app.homepage'), $this->generateUrl('app_home')],
[$translator->trans('app.applist'), $this->generateUrl('app_apps')]
],
'settings' => $settingsRepo,
'categories' => $categories,
'pageColor' => $settingsRepo->find(1)->getContent()['pageColor']
]);
}
/**
* @Route("/apps/{id}", name="app_apps_form")
* @ParamConverter("category", options={"mapping": {"id": "id"}})
*/
public function apps(ManagerRegistry $doctrine, TranslatorInterface $translator, Request $request, Category $category): Response
{
if ( !count($category->getQuestions()) > 0 )
{
throw $this->createNotFoundException('404');
}
$this->denyAccessUnlessGranted('ROLE_USER');
$settingsRepo = $doctrine->getRepository(Settings::class);
$entityManager = $doctrine->getManager();
$formBuilder = $this->createFormBuilder();
foreach ( $category->getQuestions() as $question )
{
if ( $question->getType() == 1 )
{
$formBuilder->add('answer_' . $question->getId(), TextType::class, [
'label' => $question->getName(),
'required' => true,
]);
} elseif ( $question->getType() == 2 )
{
$formBuilder->add('answer_' . $question->getId(), TextareaType::class, [
'label' => $question->getName(),
'required' => true,
]);
}
}
$form = $formBuilder->getForm();
// handle it..
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
// get some data
$application = new Applications();
$data = $form->getData();
$application->setStatus(0);
$application->setUser($this->getUser());
$application->setCreatedAt(new \DateTimeImmutable());
$application->setAnswers($data);
$application->setCategory($category);
$entityManager->persist($application);
$entityManager->flush();
$this->addFlash('add_success', 'Twoje podanie zostało przesłane do sprawdzenia!');
return $this->redirectToRoute('app_apps');
}
return $this->render('frontend/pages/sites/apps/form.html.twig', [
'title' => $translator->trans('app.form_apps') . ' :: ' . $settingsRepo->find(1)->getContent()['pageTitle'],
'pageTitle' => $translator->trans('app.form_apps'),
'breadcrumb' => [
[$translator->trans('app.homepage'), $this->generateUrl('app_home')],
[$translator->trans('app.applist'), $this->generateUrl('app_apps')],
[$translator->trans('app.form_apps'), $this->generateUrl('app_apps_form', ['id' => $category->getId()])]
],
'category' => $category,
'settings' => $settingsRepo,
'form' => $form->createView(),
'pageColor' => $settingsRepo->find(1)->getContent()['pageColor']
]);
}
}