<?php
namespace App\Controller;
use App\Controller\Admin\DemandeCrudController;
use App\Controller\Admin\FormUserCrudController;
use App\Entity\Demande;
use App\Entity\DemandeNote;
use App\Entity\Meeting;
use App\Entity\Notification;
use App\Entity\Ville;
use App\Form\DemandeNoteType;
use App\Form\FormUserNoteType;
use App\Form\MeetingType;
use App\Form\ReclamationReponseType;
use App\Repository\MeetingRepository;
use App\Service\FileUploader;
use App\Service\NotificationManager;
use DateTime;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
use Exception;
use App\Entity\Form;
use App\Entity\User;
use App\Entity\Status;
use App\Entity\FormStep;
use App\Entity\FormUser;
use App\Entity\FormChamp;
use App\Entity\FormChampOptions;
use App\Form\DemandeType;
use App\Entity\FormValues;
use App\Entity\FormUserNote;
use App\Form\FormulaireType;
use App\Security\EmailVerifier;
use App\Repository\FormRepository;
use App\Repository\UserRepository;
use Knp\Bundle\SnappyBundle\KnpSnappyBundle;
use Knp\Component\Pager\PaginatorInterface;
use Knp\Snappy\Pdf;
use Kricha\DoctrineAuditBundle\AuditManager;
use Kricha\DoctrineAuditBundle\Reader\AuditReader;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Mime\Address;
use App\Repository\FormUserRepository;
use App\Repository\FormChampRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\FormUserNoteRepository;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Generator\UrlGenerator;
use Symfony\Component\Validator\Validator\ValidatorInterface;
#[Route('/form')]
class FormController extends BaseController
{
private $emailVerifier;
private $adminUrlGenerator;
public function __construct(EmailVerifier $emailVerifier, AdminUrlGenerator $adminUrlGenerator)
{
$this->emailVerifier = $emailVerifier;
$this->adminUrlGenerator = $adminUrlGenerator;
}
#[Route('/', name: 'app_form')]
public function index( PaginatorInterface $paginator, Request $request, FormRepository $formRepository): Response
{
$pagination = $paginator->paginate(
$formRepository->getPublishedNotEnded(), /* query NOT result */
$request->query->getInt('page', 1), /*page number*/
8 /*limit per page*/
);
return $this->render('form/index.html.twig', [
'formulaires' => $pagination
]);
}
#[Route('/edit/{id}', name: 'edit_form')]
public function edit($id, FormRepository $formRepository): Response
{
return $this->render('form/createForm.html.twig', [
'form' => $formRepository->find($id)
]);
}
#[Route('/creation/{id}', name: 'form_create')]
public function form_create($id, Request $request, FormRepository $formRepository, EntityManagerInterface $entityManager): Response
{
if ($id != -1) {
$form = $formRepository->find($id);
foreach ($form->getFormSteps() as $step) {
foreach ($step->getFormChamps() as $champ) {
$entityManager->remove($champ);
$entityManager->flush();
}
$entityManager->remove($step);
$entityManager->flush();
}
} else {
$form = new Form();
}
$form->setDate(new \DateTime());
$form->setNom($_REQUEST['txtNom']);
$form->setDescription($_REQUEST['txtDescription']);
$form->setDateDebut(new \DateTime($_REQUEST['TxtDateDebut']));
$form->setDateFin(new \DateTime($_REQUEST['TxtDateFin']));
if (isset($_FILES['fileBackground']['tmp_name']) && !empty($_FILES['fileBackground']['tmp_name'])) {
$nom = $_FILES['fileBackground']['tmp_name'];
$fileName = uniqid() . '-' . $_FILES['fileBackground']['name'];
move_uploaded_file($nom, $this->getParameter('demande_directory') . $fileName);
$form->setFileBackground($fileName);
}
if (isset($_FILES['fileNotification']['tmp_name']) && !empty($_FILES['fileNotification']['tmp_name'])) {
$nom = $_FILES['fileNotification']['tmp_name'];
$fileName = uniqid() . '-' . $_FILES['fileNotification']['name'];
move_uploaded_file($nom, $this->getParameter('demande_directory') . $fileName);
$form->setfileNotification($fileName);
}
foreach (json_decode($_REQUEST['data'], true) as $Phase) {
$formStep = new FormStep();
$formStep->setNom('Step');
$formStep->setPosition(1);
$formStep->setComponents(json_encode($Phase));
$formStep->setForm($form);
foreach ($Phase as $obj) {
$formChamp = new FormChamp();
$formChamp->setLabel(isset($obj['label']) ? $obj['label'] : "");
$formChamp->setType($obj['type']);
$formChamp->setId($obj['name']);
$formChamp->setFormStep($formStep);
$entityManager->persist($formChamp);
if (isset($obj['values'])) {
foreach ($obj['values'] as $option) {
$formChampOptions = new FormChampOptions();
$formChampOptions->setLabel($option["label"]);
$formChampOptions->setValue($option["value"]);
$formChampOptions->setFormChamp($formChamp);
$entityManager->persist($formChampOptions);
}
}
}
$entityManager->persist($formStep);
}
$entityManager->persist($form);
$entityManager->flush();
return new Response('', 200);
}
#[Route('/saveDataForm/{id}', name: 'saveDataForm')]
public function saveDataForm(
$id,
Request $request,
FormRepository $formRepository,
EntityManagerInterface $entityManager,
Pdf $knpSnappyPdf,
NotificationManager $notificationManager,
FileUploader $fileUploader
): Response
{
$formulaire = $formRepository->find($id);
$formUser = new FormUser();
foreach ($formulaire->getResponsables() as $responsable){
$formUser->addResponsable($responsable);
}
// $formUser->addResponsable($formulaire->getResponsable());
$formUser->setForm($formulaire);
$formUser->setUser($this->getUser());
$formUser->setDate(new \DateTime());
foreach ($formulaire->getFormSteps() as $step) {
foreach ($step->getFormChamps() as $obj) {
$formValue = new FormValues();
$formValue->setFormUser($formUser);
$formValue->setFormChamp($obj);
if ($obj->getType() == 'file') {
foreach ($request->files as $files) {
$valueName = "";
foreach ($files as $file) {
$fileName = $fileUploader->upload($file, '../files');
$valueName = $valueName == '' ? $fileName : $valueName . ',' . $fileName;
}
$formValue->setValue($valueName);
}
} elseif ($obj->getType() == 'checkbox-group') {
$valueName = "";
if ( $request->request->get($obj->getId()) ){
foreach ($request->request->get($obj->getId()) as $checkbox_value) {
$valueName = $valueName == '' ? $checkbox_value : $valueName . '|#|' . $checkbox_value;
}
}
$formValue->setValue($valueName);
}
// elseif( $obj->getType() == 'ville' ){
// dd($request, $obj);
// }
// elseif( $obj->getType() == 'map' ){
// dd($request, $obj);
// }
else {
$formValue->setValue($request->request->get($obj->getId()));
}
$entityManager->persist($formValue);
}
}
$entityManager->persist($formUser);
$entityManager->flush();
$edit_demande_url = $this->generateUrl('app_redirect_email', array( 'id' => $formUser->getId(), 'type' => 'formuser' ), UrlGenerator::ABSOLUTE_URL );
$this->emailVerifier->sendEmailConfirmation(
'app_verify_email',
$this->getUser(),
(new TemplatedEmail())
->from(new Address($this->getParameter('EmailAdmin'), 'IGPPP'))
->to($this->getParameter('EmailNotification'))
->subject('Une nouvelle demande a été ajoutée !')
->htmlTemplate('email/email_nouvelle_demande.html.twig')
->context([
'User' => $this->getUser()->getEmail(),
'demande_url' => $edit_demande_url,
'demande_id' => $formUser->getId(),
])
);
$admins = $entityManager->getRepository(User::class)->findByRole('ROLE_ADMIN');
foreach ( $admins as $admin){
$notification_message = 'Une nouvelle demande a été ajoutée !' . $formUser->getId() . ' du formulaire ' . $formUser->getForm()->getNom();
$notificationManager->pushMessage('Une nouvelle demande a été ajoutée !', $notification_message, $admin, $edit_demande_url);
}
$show_demande_url = $this->generateUrl('form_show', array( 'id' => $formUser->getId(), 'meeting_id' => 0 ), UrlGenerator::ABSOLUTE_URL );
$protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === 0 ? 'https://' : 'http://';
$this->emailVerifier->sendEmailConfirmation(
'app_verify_email',
$this->getUser(),
(new TemplatedEmail())
->from(new Address($this->getParameter('EmailAdmin'), 'IGPPP'))
->to($this->getUser()->getEmail())
->subject('Une nouvelle demande a été ajoutée !')
->htmlTemplate('email/email_notification_demande_file.html.twig')
->context([
'form' => $formulaire,
'serveur' => $protocol.$_SERVER["HTTP_HOST"],
'demande_url' => $show_demande_url,
'demande_id' => $formUser->getId(),
])
);
$notification_message = 'Une nouvelle demande a été ajoutée !' . $formUser->getId() . ' du formulaire ' . $formUser->getForm()->getNom();
$notificationManager->pushMessage('Une nouvelle demande a été ajoutée !', $notification_message, $this->getUser(), $show_demande_url);
return new Response($formUser->getId());
}
#[Route('/afficher/{id}', name: 'form_show')]
public function formShow(
$id,
Request $request,
FormUserRepository $formUserRepository,
UserRepository $UserRepository,
AuditReader $auditReader,
MeetingRepository $meetingRepository
): Response
{
$data = [];
$demande = $formUserRepository->find($id);
$note = new FormUserNote();
$meeting = new Meeting();
if (!$demande)
return $this->redirectToRoute('front');
$users = $UserRepository->findByRole('ROLE_RD');
foreach( $demande->getForm()->getFormSteps() as $step ){
foreach( $step->getComponents() as $component ){
$component_data = [];
if( property_exists($component, "helpText") ){
$component_data['helpText'] = $component->helpText;
}
if( property_exists($component, "name") ){
$data[ $component->name ] = $component_data;
}
}
}
$formNote = $this->createForm(FormUserNoteType::class, $note);
$formMeeting = $this->createForm(MeetingType::class, $meeting);
$values = [];
foreach( $demande->getFormValues() as $form_value ){
$key = $form_value->getFormChamp()->getId();
$values[ $key ] = $form_value->getValueStream();
}
$demande_audit = $auditReader->getAudits('App\Entity\FormUser', $id );
if ( $request->query->get('meeting_id') ){
$meeting_formUser = $meetingRepository->find( $request->query->get('meeting_id') );
}else{
$meeting_formUser = null;
}
return $this->render('form/ResultatReponseForm.html.twig', [
'data' => $data,
'values' => $values,
'demande' => $demande,
'demande_audit' => $demande_audit,
'users' => $users,
'status_array' => array_flip(FormUser::STATUS_ARRAY),
'formNote' => $formNote->createView(),
'formMeeting' => $formMeeting->createView(),
'meeting_formUser' => $meeting_formUser
]);
}
#[Route('/affecter/responsable/{type}/{id}', name: 'affecter_responsable')]
public function affecterResponsable( $id, $type = 'formuser', Request $request, EntityManagerInterface $entityManager, NotificationManager $notificationManager ): Response
{
if ( $type == 'formuser' ){
$form = $entityManager->getRepository(FormUser::class)->find($id);
$edit_demande_url = $this->adminUrlGenerator
->setController(FormUserCrudController::class)
->setAction(Action::EDIT)
->setEntityId($id)
->generateUrl();
$show_demande_url = $this->generateUrl('form_show', array( 'id' => $id, 'meeting_id' => 0 ), UrlGenerator::ABSOLUTE_URL );
if ($request->request->get('formUser')['Etat']){
$form->setEtat( $request->request->get('formUser')['Etat'] );
}
}else{
$form = $entityManager->getRepository(Demande::class)->find($id);
$edit_demande_url = $this->adminUrlGenerator
->setController(DemandeCrudController::class)
->setAction(Action::EDIT)
->setEntityId($id)
->generateUrl();
$show_demande_url = $this->generateUrl('app_demande_show', array( 'id' => $id ), UrlGenerator::ABSOLUTE_URL );
if ($request->request->get('formUser')['Etat']){
$form->setStatus( $request->request->get('formUser')['Etat'] );
}
}
// send mail to responsable && add alert
$oldResponsablesIds = $form->getResponsables()->map(function($obj){return $obj->getId();})->getValues();
$newResponsablesIds = array_diff( $request->request->get('formUser')['responsables'], $oldResponsablesIds);
foreach ($newResponsablesIds as $newResponsableId) {
$newResponsable = $entityManager->getRepository(User::class)->find($newResponsableId);
if ( $type == 'formuser' ){
// Affectation d’un nouveau dossier Responsable Dossier formuser
$this->emailVerifier->sendEmailConfirmation(
'app_verify_email',
$form->getUser(),
(new TemplatedEmail())
->from(new Address($this->getParameter('EmailAdmin'), 'IGPPP'))
->to( $newResponsable->getEmail() )
->subject('Affectation à une demande !')
->htmlTemplate('email/email_affectation_demande.html.twig')
->context([
'form' => $form->getForm(),
'user' => $form->getUser()->getEmail(),
'demande_url' => $edit_demande_url,
'demande_id' => $form->getId(),
])
);
$notification_message = 'Affectation à une demande !';
$notificationManager->pushMessage('Affectation à une demande !', $notification_message, $newResponsable, $edit_demande_url);
}else{
// Affectation d’un nouveau dossier Responsable Dossier demande principale
$this->emailVerifier->sendEmailConfirmation(
'app_verify_email',
$form->getUser(),
(new TemplatedEmail())
->from(new Address($this->getParameter('EmailAdmin'), 'IGPPP'))
->to( $newResponsable->getEmail() )
->subject('Affectation à une demande !')
->htmlTemplate('email/email_affectation_demande_principale.html.twig')
->context([
'user' => $form->getUser()->getEmail(),
'demande_url' => $edit_demande_url,
'demande_id' => $form->getId(),
])
);
$notification_message = 'Affectation à une demande !';
$notificationManager->pushMessage('Affectation à une demande !', $notification_message, $newResponsable, $edit_demande_url);
}
}
foreach ($form->getResponsables() as $responsable) {
$form->removeResponsable($responsable);
}
if ($request->request->get('formUser')['responsables']) {
foreach ($request->request->get('formUser')['responsables'] as $responsable_id) {
$form->addResponsable($entityManager->getRepository(User::class)->find($responsable_id));
}
}
$entityManager->flush();
if ( $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_RD' ) ){
return $this->redirect($edit_demande_url);
}
return $this->redirect($show_demande_url);
}
#[Route('/note/delete/{id}/{type}', name: 'note_delete')]
public function noteDelete( $id, $type = 'formuser', EntityManagerInterface $entityManager )
{
if ( $type == 'formuser' ){
$note = $entityManager->getRepository(FormUserNote::class)->find($id);
$demande_id = $note->getFormuser()->getId();
$edit_demande_url = $this->adminUrlGenerator
->setController(FormUserCrudController::class)
->setAction(Action::EDIT)
->setEntityId($demande_id)
->generateUrl();
$show_demande_url = $this->generateUrl('form_show', array( 'id' => $demande_id, 'meeting_id' => 0 ), UrlGenerator::ABSOLUTE_URL );
}else{
$note = $entityManager->getRepository(DemandeNote::class)->find($id);
$demande_id = $note->getDemande()->getId();
$edit_demande_url = $this->adminUrlGenerator
->setController(DemandeCrudController::class)
->setAction(Action::EDIT)
->setEntityId($demande_id)
->generateUrl();
$show_demande_url = $this->generateUrl('app_demande_show', array( 'id' => $demande_id ), UrlGenerator::ABSOLUTE_URL );
}
$entityManager->remove( $note );
$entityManager->flush();
if ( $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_RD' ) ){
return $this->redirect($edit_demande_url);
}
return $this->redirect($show_demande_url);
}
#[Route('/note/edit/{type}', name: 'note_edit')]
public function noteEdit( $type = 'formuser', Request $request, EntityManagerInterface $entityManager )
{
if ( $type == 'formuser' ){
$note = $entityManager->getRepository(FormUserNote::class)->find( $request->request->get('form_edit_note_id') );
$demande_id = $note->getFormuser()->getId();
$edit_demande_url = $this->adminUrlGenerator
->setController(FormUserCrudController::class)
->setAction(Action::EDIT)
->setEntityId($demande_id)
->generateUrl();
$show_demande_url = $this->generateUrl('form_show', array( 'id' => $demande_id, 'meeting_id' => 0 ), UrlGenerator::ABSOLUTE_URL );
}else{
$note = $entityManager->getRepository(DemandeNote::class)->find( $request->request->get('form_edit_note_id') );
$demande_id = $note->getDemande()->getId();
$edit_demande_url = $this->adminUrlGenerator
->setController(DemandeCrudController::class)
->setAction(Action::EDIT)
->setEntityId($demande_id)
->generateUrl();
$show_demande_url = $this->generateUrl('app_demande_show', array( 'id' => $demande_id ), UrlGenerator::ABSOLUTE_URL );
}
$note->setNote( $request->request->get('form_edit_note_note') );
$entityManager->flush();
if ( $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_RD' ) ){
return $this->redirect($edit_demande_url);
}
return $this->redirect($show_demande_url);
}
#[Route('/note/{id}/{type}/files-download', name: 'note_files_download')]
public function noteFilesDownload( $id, $type = 'formuser', EntityManagerInterface $entityManager )
{
$zip = new \ZipArchive();
if ( $type == 'formuser' ){
$note = $entityManager->getRepository(FormUserNote::class)->find($id);
$files_path = $this->getParameter('uploads_directory') . '/note/autre/f-' . $note->getFormUser()->getForm()->getId()
. '/d-' . $note->getFormUser()->getId() .'/' ;
$archive_file_name = 'f-' . $note->getFormUser()->getForm()->getId()
. '--d-' . $note->getFormUser()->getId() . '--n-' . $note->getId() . '.zip';
}else{
$note = $entityManager->getRepository(DemandeNote::class)->find($id);
$files_path = $this->getParameter('uploads_directory') . '/note/principale/d-' . $note->getDemande()->getId() .'/' ;
$archive_file_name = 'fp--d-' . $note->getDemande()->getId() . '--n-' . $note->getId() . '.zip';
}
$archive_file = $files_path . $archive_file_name;
//create the file and throw the error if unsuccessful
if ($zip->open($archive_file, \ZipArchive::CREATE )!==TRUE) {
exit("cannot open <$archive_file_name>\n");
}
//add each files of $file_name array to archive
foreach($note->getFiles() as $file)
{
if (file_exists($files_path . $file)){
$zip->addFile($files_path . $file, $file );
}
}
$zip->close();
//then send the headers to force download the zip file
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=$archive_file_name");
header("Content-length: " . filesize($archive_file));
header("Pragma: no-cache");
header("Expires: 0");
readfile("$archive_file");
exit;
}
#[Route('/{type}/{id}/download-zip', name: 'download_zip_demande')]
public function downloadZipDemande($id, $type = 'formuser', EntityManagerInterface $entityManager, Pdf $knpSnappyPdf)
{
$zip = new \ZipArchive();
$files_path = $this->getParameter('uploads_directory') . '/../files/';
$demande = null;
$archive_file_name = '';
$demande_pdf_filename = '';
if ($type == 'formuser') {
$demande = $entityManager->getRepository(FormUser::class)->find($id);
$archive_file_name = 'f-' . $demande->getForm()->getId() . '--d-' . $demande->getId() . '.zip';
$demande_pdf_filename = 'f-' . $demande->getForm()->getId() . '--d-' . $demande->getId() . '.pdf';
if (file_exists($files_path . $demande_pdf_filename)) {
unlink($files_path . $demande_pdf_filename);
}
$values = [];
foreach ($demande->getFormValues() as $formvalue) {
$values[$formvalue->getFormChamp()->getId()] = $formvalue->getValueStream();
}
// Check if all values are empty
$data = [];
foreach ($demande->getForm()->getFormSteps() as $step) {
foreach ($step->getComponents() as $component) {
$component_data = [];
if (property_exists($component, "helpText")) {
$component_data['helpText'] = $component->helpText;
}
if (property_exists($component, "name")) {
$data[$component->name] = $component_data;
}
}
}
$knpSnappyPdf->generateFromHtml(
$this->renderView(
'form/form_user_to_pdf.html.twig',
[
'demande' => $demande,
'values' => $values,
'data' => $data,
]
),
$files_path . $demande_pdf_filename
);
} else {
$demande = $entityManager->getRepository(Demande::class)->find($id);
$archive_file_name = 'fp--d-' . $demande->getId() . '.zip';
$demande_pdf_filename = 'fp--d-' . $demande->getId() . '.pdf';
if (!file_exists($files_path . $demande_pdf_filename)) {
// generate demande pdf
$typeProtection = [
1 => 'Classe',
2 => 'Protégé',
3 => 'Aucun type de protection',
0 => 'Autre type de protection'
];
$TypeEtude = [
1 => 'Relévé géometre',
2 => 'Diagnostic',
3 => 'Etudes architecturales',
4 => 'Etudes techniques',
0 => 'Autre'
];
$SecteurProjet = [
1 => 'Culturel',
2 => 'Touristique',
0 => 'Autre'
];
$knpSnappyPdf->generateFromHtml(
$this->renderView(
'demande/demande_to_pdf.html.twig',
[
'demande' => $demande,
'typeProtection' => $typeProtection,
'TypeEtude' => $TypeEtude,
'SecteurProjet' => $SecteurProjet,
]
),
$files_path . $demande_pdf_filename
);
}
}
$archive_file = $files_path . $archive_file_name;
// create the file and throw the error if unsuccessful
if ($zip->open($archive_file, \ZipArchive::CREATE) !== TRUE) {
exit("cannot open <$archive_file_name>\n");
}
// add demande pdf to archive
if (file_exists($files_path . $demande_pdf_filename)) {
$zip->addFile($files_path . $demande_pdf_filename, $demande_pdf_filename);
}
if ($type == 'formuser') {
// add each file of $file_name array to archive
foreach ($demande->getFormValues() as $formValue) {
if ($formValue->getFormChamp()->getType() == 'file') {
foreach (explode(',', $formValue->getValueStream()) as $val) {
if (file_exists($files_path . $val) && is_file($files_path . $val)) {
$zip->addFile($files_path . $val, basename($val));
}
}
}
}
// add note files to archive
foreach ($demande->getFormUserNotes() as $note) {
$note_files_path = $this->getParameter('uploads_directory') . '/note/autre/f-' . $note->getFormUser()->getForm()->getId() . '/d-' . $note->getFormUser()->getId() . '/';
if ($note->getFiles()) {
foreach ($note->getFiles() as $file) {
if (file_exists($note_files_path . $file) && is_file($note_files_path . $file)) {
$zip->addFile($note_files_path . $file, basename($file));
}
}
}
}
} else {
$demande_files_path = $this->getParameter('demande_directory');
$this->addFilesToZip($zip, $demande->getDemandePhotoBatiments(), $demande_files_path);
$this->addFilesToZip($zip, $demande->getJustifiantProprietes(), $demande_files_path);
$this->addFilesToZip($zip, $demande->getJustifiantApprobationSpontanes(), $demande_files_path);
$this->addFilesToZip($zip, $demande->getDemandeJustificationProtections(), $demande_files_path);
// add note files to archive
foreach ($demande->getDemandeNotes() as $note) {
$note_files_path = $this->getParameter('uploads_directory') . '/note/principale/d-' . $note->getDemande()->getId() . '/';
if ($note->getFiles()) {
foreach ($note->getFiles() as $file) {
if (file_exists($note_files_path . $file) && is_file($note_files_path . $file)) {
$zip->addFile($note_files_path . $file, basename($file));
}
}
}
}
}
$zip->close();
//then send the headers to force download the zip file
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=$archive_file_name");
header("Content-length: " . filesize($archive_file));
header("Pragma: no-cache");
header("Expires: 0");
readfile("$archive_file");
exit;
}
private function addFilesToZip($zip, $files, $base_path)
{
foreach ($files as $file) {
$file_path = $base_path . '/' . $file->getSource();
if (file_exists($file_path) && is_file($file_path)) {
$zip->addFile($file_path, basename($file_path));
}
}
}
#[Route('/note/add/{type}/{id}', name: 'form_user_note_add')]
public function formUserNoteAdd(
$id,
$type = 'formuser',
Request $request,
FileUploader $fileUploader,
EntityManagerInterface $entityManager,
NotificationManager $notificationManager
): Response
{
$files = [];
if ( $type == 'formuser'){
$note = new FormUserNote();
$demande = $entityManager->getRepository(FormUser::class)->find($id);
$formNote = $this->createForm(FormUserNoteType::class, $note);
}else{
$note = new DemandeNote();
$demande = $entityManager->getRepository(Demande::class)->find($id);
$formNote = $this->createForm(DemandeNoteType::class, $note);
}
$formNote->handleRequest($request);
if ( $formNote->isSubmitted() ) {
$note->setUser($this->getUser());
$note->setIsPublic(true);
$note->setDate( new \DateTime() );
if ( $type == 'formuser'){
foreach ( $request->files->get('form_user_note')['files'] as $file ){
$filename = $fileUploader->upload( $file, '/note/autre/f-' . $demande->getForm()->getId() . '/d-' . $demande->getId() );
$files[] = $filename;
}
$note->setFiles($files);
$note->setFormUser( $demande );
if ( $request->request->get('form_user_note')['isFinal'] == 1 ){
$demande->setEtat('VALIDATED');
}
}else{
foreach ( $request->files->get('demande_note')['files'] as $file ){
$filename = $fileUploader->upload( $file, '/note/principale/d-' . $demande->getId() );
$files[] = $filename;
}
$note->setFiles( $files );
$note->setDemande( $demande );
if ( $request->request->get('demande_note')['isFinal'] == 1 ){
$demande->setStatus('VALIDATED');
}
}
$entityManager->persist($note);
$entityManager->flush();
// send notification email to "responsables" of new note
if ( $type == 'formuser') {
$edit_demande_url = $this->adminUrlGenerator
->setController(FormUserCrudController::class)
->setAction(Action::EDIT)
->setEntityId($id)
->generateUrl();
$show_demande_url = $this->generateUrl('form_show', array( 'id' => $demande->getId(), 'meeting_id' => 0 ), UrlGenerator::ABSOLUTE_URL );
}else{
$edit_demande_url = $this->adminUrlGenerator
->setController(DemandeCrudController::class)
->setAction(Action::EDIT)
->setEntityId($id)
->generateUrl();
$show_demande_url = $this->generateUrl('app_demande_show', array( 'id' => $demande->getId() ), UrlGenerator::ABSOLUTE_URL );
}
foreach ( $demande->getResponsables() as $responsable ){
$this->emailVerifier->sendEmailConfirmation(
'app_verify_email',
$this->getUser(),
(new TemplatedEmail())
->from(new Address($this->getParameter('EmailAdmin'), 'IGPPP'))
->to( $responsable->getEmail() )
->subject('Une nouvelle note a été ajoutée !')
->htmlTemplate('email/email_nouvelle_note.html.twig')
->context([
'user' => $this->getUser()->getEmail(),
'demande_url' => $edit_demande_url,
'demande_id' => $note->getId(),
])
);
if ( $type == 'formuser') {
$notification_message = 'nouvelle note pour la demande ' . $demande->getId() . ' du formulaire ' . $demande->getForm()->getNom();
$notificationManager->pushMessage('Une nouvelle note a été ajoutée !', $notification_message, $responsable, $edit_demande_url);
}else{
$notification_message = 'nouvelle note pour la demande ' . $demande->getId() . ' du formulaire de demande d’assistance technique de l’IGPPP';
$notificationManager->pushMessage('Une nouvelle note a été ajoutée !', $notification_message, $responsable, $edit_demande_url);
}
}
// send notification of reception of note : "demandeur"
$this->emailVerifier->sendEmailConfirmation(
'app_verify_email',
$this->getUser(),
(new TemplatedEmail())
->from(new Address($this->getParameter('EmailAdmin'), 'IGPPP'))
->to( $this->getUser()->getEmail() )
->subject('Succès de réception du note !')
->htmlTemplate('email/email_notification_reception_note.html.twig')
->context([
'demande_url' => $show_demande_url,
'demande_id' => $note->getId(),
])
);
if ( $type == 'formuser') {
$notification_message = 'Succès de réception du note !' . $demande->getId() . ' du formulaire ' . $demande->getForm()->getNom();
$notificationManager->pushMessage('Succès de réception du note !', $notification_message, $this->getUser(), $show_demande_url);
}else{
$notification_message = 'Succès de réception du note !' . $demande->getId() . ' du formulaire du formulaire de demande d’assistance technique de l’IGPPP';
$notificationManager->pushMessage('Succès de réception du note !', $notification_message, $this->getUser(), $show_demande_url);
}
}
if ($this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_RD')) {
return $this->redirect($edit_demande_url);
}
return $this->redirect($show_demande_url);
}
#[Route('/Repondre/{id}', name: 'form_replay')]
public function form_replay($id, FormRepository $formRepository, EntityManagerInterface $entityManager,): Response
{
$formulaire = $formRepository->find($id);
if (!$formulaire)
return $this->redirectToRoute('front');
if (!$formulaire->isPublier())
return $this->redirectToRoute('front');
$codes = [];
$villes = $entityManager->getRepository(Ville::class)->findAll();
foreach ( $villes as $ville ){
$codes[ $ville->getNom() . ' ' . $ville->getCodePostal() ] = $ville->getNom() . ' ' . $ville->getCodePostal();
}
return $this->render('form/RepondreForm.html.twig', [
'Components' => $formulaire->getFormSteps(),
'Formulaire' => $formulaire,
'villes' => $codes
]);
}
}