<?php
namespace App\Controller;
use App\Entity\Notes;
use App\Form\NotesType;
use App\Repository\NotesRepository;
use App\Repository\FamilyRepository;
use App\Repository\UserRepository;
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\Validator\Validator\ValidatorInterface;
use Symfony\Component\Security\Core\Security;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
/**
* @Route("/notes")
*/
class NotesController extends AbstractController
{
/**
* @var Security
*/
private $security;
private EntityManagerInterface $em;
public function __construct(Security $security, CsrfTokenManagerInterface $tokenManager, EntityManagerInterface $em)
{
$this->security = $security;
$this->tokenManager = $tokenManager;
$this->em = $em;
}
/**
* @Route("/", name="app_notes_index", methods={"GET"})
*/
public function index(NotesRepository $notesRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
return $this->render('notes/index.html.twig', [
'notes' => $notesRepository->findAll(),
]);
}
/**
* @Route("/new", name="app_notes_new", methods={"GET", "POST"} , options={"expose"=true})
*/
public function new(Request $request, NotesRepository $notesRepository, FamilyRepository $FamilyRepository, ValidatorInterface $validator): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$error = null;
$note = new Notes();
$form = $this->createForm(NotesType::class, $note);
$form->handleRequest($request);
if ($form->isSubmitted() && !$form->isValid()) {
$errors = $validator->validate($familyMember);
if (count($errors) > 0) {
$error = $errors[0]['constraint']['message'];
} else {
$error = 'Technisches Problem .';
}
return new Response($error);
} else if ($form->isSubmitted() && $form->isValid()) {
//$user = $this->security->getUser()->getRoles() ;
$user = $this->security->getUser();
$note->setCreatedAt(\DateTime::createFromFormat('Y-m-d H:i:s', date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s')))));
$notesRepository->add($note, true);
return new Response('OK');
}
return $this->renderForm('notes/new.html.twig', [
'note' => $note,
'form' => $form,
]);
}
/**
* @Route("/{id}/show", name="app_notes_show", methods={"GET"})
*/
public function show(Notes $note): Response
{
return $this->render('notes/show.html.twig', [
'note' => $note,
]);
}
/**
* @Route("/{id}/edit", name="app_notes_edit", methods={"GET", "POST"}, options={"expose"=true})
*/
public function edit(Request $request, Notes $note, NotesRepository $notesRepository): Response
{
$form = $this->createForm(NotesType::class, $note);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$notesRepository->add($note, true);
return new Response('OK');
}
return $this->renderForm('notes/edit.html.twig', [
'note' => $note,
'form' => $form,
]);
}
/**
* @Route("/{id}/delete", name="app_notes_delete", methods={"POST"}, options={"expose"=true})
*/
public function delete(Request $request, Notes $note, NotesRepository $notesRepository): Response
{
if ($this->isCsrfTokenValid('delete' . $note->getId(), $request->request->get('_token_note'))) {
$notesRepository->remove($note, true);
}
return new Response('OK');
}
/**
* @Route("/serverNotes", name="serverNotes", methods={"GET"} , options = {"expose" = true } )
*/
public function serverNotes(Request $request, UserRepository $userRepository, EntityManagerInterface $entityManager): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$user = $userRepository->find($this->security->getToken()->getUser()->getId());
$sql_where = '';
if (($request->get('searchByEtat') != "all") && ($request->get('searchByEtat') != "")) {
$sql_where .= ' AND p.etat = ' . $request->get('searchByEtat');
}
if (($request->get('searchByEtat') != "all") && ($request->get('searchByEtat') != "")) {
$sql_where .= ' AND p.etat = ' . $request->get('searchByEtat');
}
if ( (!$this->security->isGranted('ROLE_ADMIN')) && (!$this->security->isGranted('ROLE_SUPERVISOR')) ) {
$authorizedFamilies = $user->getFamilies();
$familieIds = [];
foreach($authorizedFamilies as $authorizedFamily){
$familieIds[] = $authorizedFamily->getId();
}
if(count($familieIds)>0) {
$sql_where .= ' AND f.id IN ('.implode(',', $familieIds).')';
} else {
$sql_where .= ' AND f.id = 0 ';
}
}
if (($request->get('family') != "")) {
$sql_where .= ' AND p.family = ' . $request->get('family');
}
$columns = ['p.id', 'f.firstname', 'f.lastname', 'p.id'];
$sql_search = '';
if ($request->get('search')['value'] != "") {
$sql_where_glob_arr = [];
foreach ($columns as $column) {
$sql_where_glob_arr[] = ' ' . $column . ' LIKE \'%' . $request->get('search')['value'] . '%\' ';
}
if (count($sql_where_glob_arr) > 0) {
$sql_search = ' AND ( ' . implode(' OR ', $sql_where_glob_arr) . ' ) ';
}
}
$orders = [];
for ($i = 0; $i < count($request->get('order')); $i++) {
$orders[] = $columns[$request->get('order')[$i]['column']] . ' ' . $request->get('order')[$i]['dir'];
}
if (count($orders) > 0) {
$order = " ORDER BY " . implode(' , ', $orders);
} else {
$order = " ORDER BY p.id DESC";
}
$existance = $entityManager->createQuery(
'SELECT p
FROM App\Entity\Notes p
LEFT JOIN p.family f
WHERE 1=1 ' . $sql_where . ' ' . $sql_search . '
'
)
->getResult();
$I_nbResultatsTotal = count($existance);
$limit = $request->get('length');
$offset = $request->get('start');
$array_search = array();
//->setParameter('nom', '%'.$request->get('searchByNom').'%')
//p.nom LIKE :nom
$notes = $entityManager->createQuery(
'SELECT p
FROM App\Entity\Notes p
LEFT JOIN p.family f
WHERE 1=1 ' . $sql_where . ' ' . $sql_search . ' ' . $order . '
'
)
->setMaxResults($limit)
->setFirstResult($offset)
->getResult();
$output = [];
$status = ["Storniert", "In Bearbeitung", "Erledigt"];
foreach ($notes as $note) {
$token = $this->tokenManager->getToken('delete' . $note->getId())->getValue();
$output[] = [
'family' => $note->getFamily() != null ? $note->getFamily()->getLastname() . ' ' . $note->getFamily()->getFirstname() : 'All families',
'family_id' => $note->getFamily() != null ? $note->getFamily()->getId() : '',
'created_at' => date_format($note->getCreatedAt(), 'd/m/Y H:i:s'),
'note' => $note->getNote(),
'status' => $status[$note->getStatus()],
'user' => $note->getUser() != null ? $note->getUser()->getFirstname() . ' ' . $note->getUser()->getLastname() : 'All users',
'id' => $note->getId(),
'token' => $token
];
}
$JSON = json_encode($output);
$JSON = '{"draw": ' . $request->get('draw') . ',"recordsTotal":' . $I_nbResultatsTotal . ',"recordsFiltered":' . $I_nbResultatsTotal . ',"data":' . $JSON . '}';
$response = new Response($JSON, 200, ['Content-Type' => 'application/json']);
return $response;
}
}