<?php
namespace App\Controller;
use Fpdf\Fpdf;
use DateTime;
use ZipArchive;
use App\Entity\Address;
use App\Entity\Job;
use App\Entity\City;
use App\Entity\Page;
use App\Entity\Post;
use App\Entity\Role;
use App\Entity\User;
use App\Entity\Topic;
use App\Form\IdeaType;
use App\Service\Email;
use App\Entity\Contact;
use App\Entity\Invoice;
use App\Form\FicheType;
use App\Form\FicheVisitorType;
use App\Form\UserType;
use App\Entity\SubTheme;
use App\Form\SchoolType;
use App\Service\Utility;
use App\Form\ContactType;
use App\Form\SchoolEditType;
use App\Form\PartnerEditType;
use App\Entity\PasswordUpdate;
use App\Form\ForgetPasswordType;
use App\Form\PasswordUpdateType;
use App\Form\FicheSchoolEditType;
use App\Repository\JobRepository;
use App\Repository\CityRepository;
use App\Repository\PostRepository;
use App\Repository\UserRepository;
use App\Repository\SchoolRepository;
use App\Form\SubscribeUserSchoolType;
use App\Repository\PartnerRepository;
use Symfony\Component\Form\FormError;
use App\Form\PartnerEditConfirmedType;
use App\Form\SubscribeUserPartnerType;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class AccountController extends AbstractController
{
private $encoder;
public function __construct(UserPasswordEncoderInterface $encoder){
$this->encoder = $encoder;
}
/**
* Permet de se connecter
*
* @Route("/account/login", name="account_login")
*
* @return Response
*/
public function login(AuthenticationUtils $utils){
$error = $utils->getLastAuthenticationError();
$username = $utils->getLastUsername();
return $this->render('user/login.html.twig');
}
/**
* Permet de créer un compte utilisateur
*
* @Route("/user/signup", name="user_signup")
*
* @return Response
*/
public function signup(Request $request, UserRepository $repository, UserPasswordEncoderInterface $encoder){
$role = $this->getDoctrine()->getRepository(Role::class)->findOneBy(['access' => 'ROLE_VISITOR']);
$user = new User();
$form = $this->createForm(UserType::class, $user);
// -> Handle request POST
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// -> Check if user has already this email and has finished its registration
$userExist = $this->getDoctrine()->getRepository(User::class)->findOneBy(['email' => $form->getData()->getEmail()]);
if($userExist){
$this->addFlash('error','Ce compte existe déjà');
return $this->redirectToRoute('user_signup');
}
// -> Encoder password
$hash = $this->encoder->encodePassword($user, $user->getPassword());
// -> Set password to user
$user->setPassword($hash)
->setRole($role)
->setTypeAccount('visitor')
->setCreatedAt(new DateTime());
$manager = $this->getDoctrine()->getManager();
$manager->persist($user);
$manager->flush();
// -> Send email signup success
/*
$email = Email::sendEmail($user->getEmail(),"CUSTOMER_SIGNUP", "Votre inscription", [
'fullName' => $user->getFullName(),
'url' => $this->generateUrl('auth_login', [], UrlGeneratorInterface::ABSOLUTE_URL),
]);
*/
$this->addFlash(
'success',
"Votre compte a bien été créé"
);
return $this->redirectToRoute('account_login');
/*
$token = new UsernamePasswordToken(
$user,
$hash,
'main',
$user->getRoles()
);
$this->get('security.token_storage')->setToken($token);
$this->get('session')->set('_security_main', serialize($token));
// -> new Session
$session = new Session();
// -> Get all data in session
$data = $session->all();
*/
}
$form = $form->createView();
return $this->render('user/signup.html.twig', compact('form'));
}
/**
* Edit la fiche User
* @Route("/account/edit", name="account_edit")
* @return [type] [description]
*/
public function edit(Request $request, UserRepository $repository)
{
// -> Get current user
$user = $this->getUser();
if(!$user){
return $this->redirectToRoute('home');
}
$last_media = $user->getPicture();
if($user->getTypeAccount() == "pro"){
$form = $this->createForm(FicheType::class, $user);
} elseif ($user->getTypeAccount() == "school") {
$form = $this->createForm(FicheSchoolEditType::class, $user);
} elseif ($user->getTypeAccount() == "partner") {
$form = $this->createForm(PartnerEditType::class, $user);
} elseif ($user->getTypeAccount() == "visitor") {
$form = $this->createForm(FicheVisitorType::class, $user);
}
// -> Handle request POST
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// // Update user profile
// $media = $form['picture']->getData();
// if($media){
// $user->setPicture(Utility::saveMedia($media, $user->getTypeAccount()));
// }else{
// $user->setPicture($last_media);
// }
$manager = $this->getDoctrine()->getManager();
$manager->persist($user);
$manager->flush();
// -> Send flash message
$this->addFlash(
"success",
"Vos modifications ont bien été enregistrées"
);
return $this->redirectToRoute('account_edit');
}
return $this->render('account/edit.html.twig', [
'form' => $form->createView()
]);
}
/**
* Subscription
* @Route("/account/subscription", name="account_subscription")
* @return [type] [description]
*/
public function subscription(Request $request, UserRepository $repository)
{
$user = $this->getUser();
$role =$this->getUser()->getRole()->getAccess() == "ROLE_USER";
return $this->render('account/subscription.html.twig');
}
/**
* Datas
* @Route("/account/data", name="account_data")
* @return [type] [description]
*/
public function data(Request $request, UserRepository $repository)
{
$user = $this->getUser();
$role =$this->getUser()->getRole()->getAccess() == "ROLE_USER";
return $this->render('account/data.html.twig');
}
/**
* Datas
* @Route("/account/contract", name="account_contract")
* @return [type] [description]
*/
public function contract(Request $request, UserRepository $repository)
{
$user = $this->getUser();
if ($user->getTypeAccount() === "pro") {
$page = $this->getDoctrine()->getRepository(Page::class)->findOneBy([
'identifier' => 'contract'
]);
}else {
$page = $this->getDoctrine()->getRepository(Page::class)->findOneBy([
'identifier' => 'contract-partner'
]);
}
return $this->render('account/contract.html.twig',compact('user','page'));
}
/**
* Liste des factures
* @Route("account/invoice", name="account_invoice")
* @return [type] [description]
*/
public function invoice(Request $request, UserPasswordEncoderInterface $encoder, UserRepository $repository)
{
$user = $this->getUser();
return $this->render('account/invoice.html.twig', compact('user'));
}
/**
* Téléchargement d'une facture
* @Route("account/invoice/{id}/download", name="account_invoice_download")
* @return [type] [description]
*/
public function invoiceDownload(Request $request, $id)
{
$user = $this->getUser();
$invoice = $this->getDoctrine()->getRepository(Invoice::class)->findOneBy([
'id' => $id,
'user' => $user
]);
define('EURO',chr(128));
define('CURRENCY',chr(128));
$black = 27;
$pdf = new FPDF('P','mm','A4');
$pdf->AddPage();
$pdf->SetTextColor($black);
$pdf->SetFillColor(255,255,255);
$pdf->SetFont('Arial','B',12);
$pdf->SetXY(128,24);
$pdf->Cell(0,4,utf8_decode("Facturé à :"),0,2,'L');
// -> Client
$pdf->SetFont('Arial','',8);
$pdf->SetXY(128,30);
$pdf->Cell(0,4,utf8_decode($invoice->getUser()->getCompany()),0,2,'L');
$pdf->Cell(0,4,utf8_decode($invoice->getLastname()).' '.utf8_decode($invoice->getFirstname()),0,2,'L');
$pdf->MultiCell(80,4,utf8_decode($invoice->getUser()->getAddress()),0,2,'L',true);
$pdf->SetXY(128,50);
$pdf->Cell(0,5,utf8_decode('Adresse de facturation:'),0,2,'L');
$pdf->MultiCell(80,4,utf8_decode($invoice->getUser()->getBillingAddress()),0,2,'L',true);
$pdf->MultiCell(40,4,utf8_decode(''),0,2,'L',true);
$pdf->setX(138);
$pdf->Cell(0,4,utf8_decode('').' '.utf8_decode(''),0,2,'L');
$pdf->Cell(0,4,utf8_decode(""),0,2,'L');
// -> Date de facturation
$pdf->SetXY(11,89);
$pdf->SetFont('Arial','B',10);
$pdf->Cell(13,5,'Date : ',0,0,'L');
$pdf->SetFont('Arial','B',10);
$pdf->Cell(0,5,$invoice->getCreated()->format('d/m/Y'),0,2,'L');
// My brand
$pdf->setXY(11,38);
$pdf->Image('https://www.celeritup.fr/images/logo.png',12,16,17,17,'PNG');
$pdf->SetFont('Arial','',8);
$pdf->Cell(0,4,utf8_decode('CELERITUP'),0,2,'L',false);
$pdf->Cell(0,4,utf8_decode('9 boulevard Louis Blanc'),0,2,'L',false);
$pdf->Cell(0,4,utf8_decode('83990 Saint-Tropez - France'),0,2,'L',false);
$pdf->Cell(0,3,utf8_decode('SIRET : 85195388500015'),0,2,'L',false);
$pdf->Cell(0,3,utf8_decode('N° TVA intracommunautaire : FR34 851 953 885'),0,2,'L',false);
$pdf->Cell(0,4,utf8_decode('Site internet : www.celeritup.fr'),0,2,'L',false);
$pdf->Cell(0,4,utf8_decode('Tél: 06 98 80 23 24'),0,2,'L',false);
$pdf->Cell(0,4,utf8_decode('Email: contact@celeritup.fr'),0,2,'L',false);
// ORDER SUMMARY
$pdf->SetXY(11,82);
$pdf->SetFont('Arial','B',16);
$pdf->Cell(0,6,utf8_decode('FACTURE N°00'.$invoice->getId()),0,1,'L',false);
// Contenue summayr
$currentY = $pdf->GetY();
$currentY+= 15;
// Tableau des produits
$pdf->SetLineWidth(0.4);
$pdf->Line(11,$currentY,199,$currentY);
$currentY+= 3;
$pdf->SetFont('Arial','B',8);
//$currentY = 25;
$pdf->SetXY(10,$currentY);
$pdf->MultiCell(20,3,utf8_decode('Désignation'),0,2,'L',false);
$pdf->SetXY(110,$currentY);
$pdf->MultiCell(25,3,utf8_decode('Quantité '),0,2,'L',false);
$pdf->SetXY(140,$currentY);
$pdf->MultiCell(40,3,utf8_decode('Prix unitaire H.T'),0,2,'L',false);
$pdf->SetXY(175,$currentY);
$pdf->MultiCell(30,3,utf8_decode('Total H.T'),0,2,'L',false);
$currentY = $pdf->GetY();
$currentY+= 3;
$pdf->Line(11,$currentY,199,$currentY);
$pdf->SetFont('Arial','',8);
$currentY += 5;
$pdf->SetXY(10,$currentY);
$pdf->Cell(20,3,utf8_decode($invoice->getContent()),0,2,'L',false);
$pdf->SetXY(110,$currentY);
$pdf->Cell(20,3,utf8_decode(1),0,2,'L',false);
$pdf->SetXY(140,$currentY);
$pdf->Cell(20,3,EURO.utf8_decode($invoice->getAmountWithoutTax()/100),0,2,'L',false);
$pdf->SetXY(175,$currentY);
$pdf->Cell(20,3,EURO.utf8_decode($invoice->getAmountWithoutTax()/100),0,2,'L',false);
$currentY += 7;
$currentY += 15;
if($currentY > 260){
$pdf->AddPage();
$currentY = 20;
}
$pdf->SetXY(10,$currentY);
$pdf->SetFont('Arial','B',8);
$pdf->MultiCell(30,3,utf8_decode('Statut : Réglé'),0,2,'L',false);
$pdf->SetXY(10,$currentY+4);
$pdf->SetFont('Arial','',8);
if(true){
//$pdf->MultiCell(80,3,utf8_decode('Réglé le ').utf8_decode($invoice->pay_date->format('d/m/Y à H:i')),0,2,'L',false);
} else {
//$pdf->MultiCell(80,3,utf8_decode('En attente de réglement'),0,2,'L',false);
}
$pdf->SetXY(140,$currentY);
$pdf->SetFont('Arial','B',8);
$pdf->MultiCell(30,3,utf8_decode('Total H.T'),0,2,'L',false);
$pdf->SetXY(175,$currentY);
$pdf->SetFont('Arial','',8);
$pdf->Cell(20,3,EURO.utf8_decode($invoice->getAmountWithoutTax()/100),0,2,'L',false);
$currentY += 7;
$pdf->SetXY(140,$currentY);
$pdf->SetFont('Arial','B',8);
$pdf->MultiCell(30,3,utf8_decode('Total T.V.A').' '.utf8_decode('20').'%',0,2,'L',false);
$pdf->SetXY(175,$currentY);
$pdf->SetFont('Arial','',8);
$pdf->Cell(20,3,EURO.utf8_decode($invoice->getAmountTax()/100),0,2,'L',false);
$currentY += 7;
$pdf->SetXY(140,$currentY);
$pdf->SetFont('Arial','B',8);
$pdf->MultiCell(30,3,utf8_decode('Total T.T.C'),0,2,'L',false);
$pdf->SetXY(175,$currentY);
$pdf->SetFont('Arial','',8);
$pdf->Cell(20,3,EURO.utf8_decode($invoice->getAmountWithTax()/100),0,2,'L',false);
$currentY += 7;
$currentY+=10;
$pdf->SetFont('Arial','',7);
$pdf->SetXY(11,225);
$text_legal = "L'indemnité forfaitaire prévue en cas d'impayé après la date d'échéance est de 40 euros par facture. Le défaut de paiement de cette facture au-delà de 15 jours a compter de la réception de la présente entrainera de votre part le versement d'une pénalité correspondant aux intérêts calcules prorata temporis sur le montant du et non rélglé dans les délais stipules sur la base de 1,5 fois le taux d'intérêt en vigueur majore des frais juridiques éventuels. ";
$pdf->SetFont('Arial','',7);
$pdf->Output('FACT001 - INVOICE.pdf','I');
die();
dump($invoice);
die();
return $this->render('account/invoice.html.twig', compact('user'));
}
/**
* Permet de modifier le password quand on est connecté
* @Route("account/security", name="account_security")
* @return [type] [description]
*/
public function securitys(Request $request, UserPasswordEncoderInterface $encoder, UserRepository $repository)
{
$user = $this->getUser();
$form = $this->createForm(PasswordUpdateType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
// Check if password correct
if(!password_verify($data['password'], $user->getPassword())){
// -> Error message
$this->addFlash('error', 'Votre mot de passe est incorrect');
// -> Redirect
return $this->redirectToRoute('home');
}
// -> Hash password
$password = $data['newPassword'];
$hashPassword = $encoder->encodePassword($user, $password);
// -> Update password
$user->setPassword($hashPassword);
$manager = $this->getDoctrine()->getManager();
$manager->persist($user);
$manager->flush();
// -> Send email
$email = Email::send($user,"SUBSCRIBE_PASSWORD_UPDATE", "Mot de passe modifé", [
'fullName' => $user->getFullName()
]);
// -> Flash success message
$this->addFlash('success', 'Votre mot de passe a bien été modifié');
// -> Redirect
return $this->redirectToRoute('account_security');
}
return $this->render('account/security.html.twig', [
'form' => $form->createView()
]);
}
/**
* Mot de passe réinitialisé
* @Route("/password/reset/{token}", name="account_password_reset")
*/
public function passwordReset(Request $request, UserPasswordEncoderInterface $encoder, $token)
{
// -> Get user
// ***********
$user = $this->getDoctrine()->getRepository(User::class)->findOneBy([
'passwordResetToken' => $token
]);
// -> If user not found with password reset token
// **********************************************
if(!$user){
// -> Flash error
// **************
$this->addFlash("error", "Cette requêtes n\'est pas valide.");
// -> Redirect
// ***********
return $this->redirectToRoute('home');
}
// -> Update password
$password = Utility::randomString(8);
$hashPassword = $encoder->encodePassword($user, $password);
$user->setPassword($hashPassword);
$manager = $this->getDoctrine()->getManager();
$manager->persist($user);
$manager->flush();
// -> Send email
$email = Email::send($user,"SUBSCRIBE_PASSWORD_RESET", "Vos nouveaux accès à votre compte", [
'fullName' => $user->getFullName(),
'password' => $password,
'url' => $this->generateUrl('home', [], UrlGeneratorInterface::ABSOLUTE_URL)
]);
// -> Flash success
$this->addFlash("success", "Votre mot de passe a été reinitialisé");
// -> Redirect to the Admin users index
// ************************************
return $this->redirectToRoute('home');
}
/**
* Mot de passe oublié
* @Route("/mot-de-passe-oublie", name="account_password_forget")
*/
public function passwordForget(Request $request, UserPasswordEncoderInterface $encoder)
{
// -> Create a ForgetPasswordType form
// ***********************************
$form = $this->createForm(ForgetPasswordType::class);
// -> Receives the request for the form
// ************************************
$form->handleRequest($request);
// -> If the form is compliant, the processing is started
// ******************************************************
if ($form->isSubmitted() && $form->isValid()) {
// -> extract and recover the data into variable
// *********************************************
extract($form->getData());
// -> Find user
// ************************
$user = $this->getDoctrine()->getRepository(User::class)->findOneByEmail($email);
// -> If user doesn't exist
if(!$user){
// -> Flash error
$this->addFlash("error", "Aucun compte existe avec cette adresse mail");
// -> Redirect
return $this->redirectToRoute('home');
}
// -> Update password reset token and password reset time
$token = Utility::randomString(20);
$user->setPasswordResetToken($token)
->setPasswordResetTime(time());
$manager = $this->getDoctrine()->getManager();
$manager->persist($user);
$manager->flush();
// -> Create a random password
// ***************************
/*
$password = $this->randomString(15);
$hashPassword = $encoder->encodePassword($user, $password);
$user->setPassword($hashPassword);
$manager->persist($user);
$manager->flush();
*/
// -> Send email
$email = Email::send($user,"SUBSCRIBE_PASSWORD_FORGET", "Mot de passe oublié", [
'fullName' => $user->getFullName(),
'url' => $this->generateUrl('account_password_reset', compact('token'), UrlGeneratorInterface::ABSOLUTE_URL)
]);
// -> Flash success
$this->addFlash("success", "Un email de réinitialisation de mot de passe vous a été envoyé");
// -> Redirect to the Admin users index
// ************************************
return $this->redirectToRoute('home');
}
return $this->render('account/forgot_password.html.twig',[
'form' => $form->createView()
]);
}
/**
* Suppression du compte et des données de l'utilisateur
* @Route("account/data/delete", name="account_data_delete")
* @return [type] [description]
*/
public function delete(UserRepository $repo_users){
$user = $this->getUser();
// -> Get user's movies
$user_videos[] = ['url' => "https://vimeo.com/" . $user->getMovie()];
// -> get picture of each of its posts
$user_posts_movie = $this->getDoctrine()->getRepository(Post::class)->findBy([
'author' => $user->getId(),
'type' => 'movie'
]);
foreach ($user_posts_movie as $movie) {
$user_videos[] = ['url' => "https://vimeo.com/" . $movie->getMedia()];
}
$admin = new User();
$admin->setEmail("contact@celeritup.fr");
// -> Send email to admin
$email = Email::send($admin,"DELETED_ACCOUNT_TO_CELERITUP", "Demande de suppression d'un compte", [
'fullName' => $user->getFullName(),
'movies' => $user_videos
]);
// -> Send email to user
$email_user = Email::send($admin,"DELETED_ACCOUNT_TO_USER", "Demande de suppression de votre compte", [
'fullName' => $user->getFullName()
]);
$user->setIsDelete(true);
$manager = $this->getDoctrine()->getManager();
$manager->persist($user);
$manager->flush();
return $this->redirectToRoute('account_logout');
}
/**
* Exporter les données de l'utilisateur
* @Route("account/data/export", name="account_data_export")
* @return [type] [description]
*/
public function export(){
$encoders = [new XmlEncoder(), new JsonEncoder()];
$normalizers = [new ObjectNormalizer()];
$serializer = new Serializer($normalizers, $encoders);
$user = $this->getUser();
if(empty($user->getServices())){
foreach ($user->getServices() as $service) {
$services[] = $service->getName();
};
}else{
$services[] = "pas de services";
}
if(empty($user->getPosts())){
foreach ($user->getPosts() as $post) {
$posts[] = [
'name' => $post->getName(),
'content' => $post->getContent()
];
}
}else{
$posts[] = "pas de posts";
}
// -> Get user's movies
$user_videos[] = "https://vimeo.com/" . $user->getMovie();
// -> get picture of each of its posts
$user_posts_movie = $this->getDoctrine()->getRepository(Post::class)->findBy([
'author' => $user->getId(),
'type' => 'movie'
]);
foreach ($user_posts_movie as $movie) {
$user_videos[] = "https://vimeo.com/" . $movie->getMedia();
}
// -> If user is a pro
if ($user->getTypeAccount() == "pro") {
$result = [
'firstname' => $user->getFirstName(),
'lastname' => $user->getLastName(),
'email' => $user->getEmail(),
'job'=> $user->getJob()->getName(),
'city' => $user->getCity()->getName(),
'site' => $user->getSite(),
'phone' => $user->getPhone(),
'siret' => $user->getSiret(),
'description' => $user->getDescription(),
'url_facebook' => $user->getUrlFacebook(),
'url_twitter' => $user->getUrlTwitter(),
'url_instagram' => $user->getUrlInstagram(),
'url_linkedin' => $user->getUrlLinkedin(),
'url_youtube' => $user->getUrlYoutube(),
'comment' => $user->getComment(),
'liability_insurance' => $user->getLiabilityInsurance(),
'company' => $user->getCompany(),
'motivation' => $user->getMotivation(),
'symptoms' => $user->getSymptoms(),
'tarifAtHome' => $user->getTarifAtHome(),
'tarifAtDistance' => $user->getTarifAtDistance(),
'tarifAtOffice'=> $user->getTarifAtOffice(),
'individual' => $user->getIndividual(),
'collective' => $user->getCollective(),
'publicBaby' => $user->getPublicBaby(),
'publicChildren' => $user->getPublicChildren(),
'publicAdult' => $user->getPublicAdult(),
'publicSenior' => $user->getPublicSenior(),
'prestationParticular' => $user->getPrestationParticular(),
'prestationCompany' => $user->getPrestationCompany(),
'wishCompany' => $user->getWishCompany(),
'nameInsurance' => $user->getNameInsurance(),
'zip' => $user->getZip(),
'publicAnimals' => $user->getPublicAnimals(),
'billingAddress' => $user->getBillingAddress(),
'sponsor' => $user->getSponsor(),
'services' => $services,
'posts' => $posts,
'videos' => $user_videos
];
}elseif($user->getTypeAccount() == 'partner'){
$result = [
'firstname' => $user->getFirstName(),
'lastname' => $user->getLastName(),
'email' => $user->getEmail(),
'job'=> $user->getPartner()->getJobPartner()->getName(),
'city' => $user->getPartner()->getCity()->getName(),
'site' => $user->getPartner()->getSite(),
'phone' => $user->getPartner()->getPhone(),
'siret' => $user->getPartner()->getSiret(),
'offer' => $user->getPartner()->getOffer(),
'comment' => $user->getPartner()->getComment(),
'sponsor' => $user->getSponsor(),
'services' => $services,
'posts' => $posts,
'videos' => $user_videos
];
}
// -> Get profile picture's user
$profile_picture = 'images/' . $user->getTypeAccount() . '/'.$user->getPicture();
// -> get picture of each of its posts
$user_posts = $this->getDoctrine()->getRepository(Post::class)->findBy([
'author' => $user->getId()
]);
// -> Get all posts picture
foreach ($user_posts as $post) {
if ($post->getMedia()) {
$posts_picture[] = "images/" . $post->getType() . "/" . $post->getMedia();
}
if ($post->getMediaBack()) {
$posts_picture_back[] = "images/" . $post->getType() . "/" . $post->getMediaBack();
}
};
// -> Create a new zip
$zip = new ZipArchive;
// -> Set name to zip
$zip_name = time().".zip";
// -> Init file
touch($zip_name);
// -> If success to create zip
if($zip->open($zip_name, ZipArchive::CREATE)===TRUE){
// -> Add user data
$zip->addFromString('data.txt', json_encode($result, true));
// -> Add profile picture in zip
$zip->addFile($profile_picture);
// -> Add posts picture in zip
if(empty($posts_picture) == false){
foreach ($posts_picture as $post_media) {
if($post_media) {
$zip->addFile($post_media);
};
};
};
// -> Add posts second picture (book) in zip
if(empty($posts_media_back) == false){
foreach ($posts_picture_back as $post_media_back) {
$zip->addFile($post_media_back);
}
}
// -> Close zip
$zip->close();
// -> Check to make sure the zip exists
if(file_exists($zip_name)){
// -> Push to download the zip
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zip_name);
header('Content-Length: ' . filesize($zip_name));
readfile($zip_name);
unlink($zip_name);
}
} else {
echo("Recommencez le téléchargement");
}
}
/**
* @Route("/logout_message", name="logout_message")
*/
public function logoutMessage()
{
$this->addFlash('success', "Vous avez été déconnecté(e) !");
return $this->redirectToRoute('home');
}
}