<?php
namespace App\Controller;
use App\Entity\Fichier;
use App\Form\FichierType;
use App\Repository\FichierRepository;
use App\Repository\ApplicationRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\String\Slugger\SluggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
/**
* @Route("/fichier")
*/
class FichierController extends AbstractController
{
/**
* @Route("/", name="app_fichier_index", methods={"GET"})
*/
public function index(FichierRepository $fichierRepository): Response
{
return $this->render('fichier/index.html.twig', [
'fichiers' => $fichierRepository->findAll(),
]);
}
/**
* @Route("/new", name="app_fichier_new", methods={"GET", "POST"})
*/
public function new(Request $request, FichierRepository $fichierRepository): Response
{
$fichier = new Fichier();
$form = $this->createForm(FichierType::class, $fichier);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$fichierRepository->add($fichier, true);
return $this->redirectToRoute('app_fichier_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('fichier/new.html.twig', [
'fichier' => $fichier,
'form' => $form,
]);
}
/**
* @Route("/save/json", name="app_fichier_save", methods={"GET", "POST"})
*/
public function newSave(Request $request, SluggerInterface $slugger, FichierRepository $fichierRepository, ApplicationRepository $applicationRepository): Response
{
$appKey = $request->get('app_key');
if($appKey)
{
$application = $applicationRepository->findOneBy(['applicationPass'=>$appKey]);
if($application)
{
/** @var UploadedFile $pos1 */
$fich = $request->files->get('file');
//This condition is needed because the 'brochure' field is not required
//So the PDF file must be processed only when a file is uploaded
if ($fich)
{
$originalFilename = pathinfo($fich->getClientOriginalName(), PATHINFO_FILENAME);
//This is needed to safely include the file name as part of the URL
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename.'-'.uniqid().'.'.$fich->guessExtension();
$extension = $fich->guessExtension();
// Move the file to the directory where they must be stored
try {
$fich->move(
$this->getParameter('file_directory'),
$newFilename
);
} catch (FileException $e)
{
// ... handle exception if something happens during file upload
}
$fichier = new Fichier();
//enregistrement de tout
$fichier->setOriginalName($originalFilename);
$fichier->setChemin($newFilename);
$fichier->setExtension($extension);
$fichier->setApplication($application);
$fichierRepository->add($fichier, true);
$post = array(
'status' => 'SUCCESS',
'message' => "Votre fichier as été enregistré avec succès...",
'chemin' => "/uploads/kyvala/fichier/".$newFilename,
);
}else
{
$post = array(
'status' => 'FAILED',
'message' => "Aucun fichier à enregistrer...",
);
}
}else
{
$post = array(
'status' => 'FAILED',
'message' => "La clé d'application est erronée...",
);
}
}else
{
$post = array(
'status' => 'FAILED',
'message' => "La clé d'application est absente...",
);
}
$response = new JsonResponse($post);
return $response;
}
/**
* @Route("/{id}", name="app_fichier_show", methods={"GET"})
*/
public function show(Fichier $fichier): Response
{
return $this->render('fichier/show.html.twig', [
'fichier' => $fichier,
]);
}
/**
* @Route("/{id}/edit", name="app_fichier_edit", methods={"GET", "POST"})
*/
public function edit(Request $request, Fichier $fichier, FichierRepository $fichierRepository): Response
{
$form = $this->createForm(FichierType::class, $fichier);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$fichierRepository->add($fichier, true);
return $this->redirectToRoute('app_fichier_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('fichier/edit.html.twig', [
'fichier' => $fichier,
'form' => $form,
]);
}
/**
* @Route("/{id}", name="app_fichier_delete", methods={"POST"})
*/
public function delete(Request $request, Fichier $fichier, FichierRepository $fichierRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$fichier->getId(), $request->request->get('_token'))) {
$fichierRepository->remove($fichier, true);
}
return $this->redirectToRoute('app_fichier_index', [], Response::HTTP_SEE_OTHER);
}
}