<?php
namespace App\Controller;
use App\Entity\User;
use App\Entity\Operation;
use App\Entity\ProductPurchase;
use App\Entity\Purchase;
use App\Entity\AlbumAudio;
use App\Entity\Contact;
use App\Form\ContactFormType;
use App\Form\UserFormType;
use App\Form\PurchaseFormType;
use App\Form\PurchaseStatusType;
use App\Service\EmailService;
use App\Repository\UserRepository;
use App\Repository\PurchaseRepository;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Uid\Uuid;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
class ApplicationController extends AbstractController
{
/**
* @Route("/createuser", name="createuser2")
*/
public function update(UserPasswordHasherInterface $passwordHasher)
{
$email = 'contact@operationslunii.fr';
$plaintextPassword = 'dcom@fnR';
$user = new User();
$hashedPassword = $passwordHasher->hashPassword(
$user,
$plaintextPasswordset
);
$user->setPassword($hashedPassword);
$user->setEmail($email);
$user->setFirstName('Data');
$user->setCreatedAt(new \DateTime());
$user->setUpdatedAt(new \DateTime());
$user->setCivilite(1);
$user->setPostalCode(92130);
$user->setLastName('Gest');
$user->setRoles(array('ROLE_SUPER_ADMIN'));
$user->setPassword($hashedPassword);
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
return new Response('Successful');
}
/**
* @Route("/", name="home")
*/
public function index(Request $request, EmailService $emailService)
{
$user = new User();
$form = $this->createForm(UserFormType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setPassword(rand(1000, 9999));
$participation = new Purchase();
$purchaseCode = "LUN-" . rand(100000, 999999);
$uuid = Uuid::v4();
$participation->setPurchaseCode($purchaseCode);
$participation->setUuid($uuid);
$participation->setAuthor($user);
$user->addPurchase($participation);
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
$email = $user->getEmail();
$subject = 'Bienvenue sur la plateforme Lunii';
$send = $emailService->send(
$email,
$subject,
$this->renderView(
//'emails/email-company-creation.html.twig',
'emails/user-create-confirm.html.twig',
[
'uuid' => $uuid,
]
)
);
$this->addFlash('success', true);
return $this->redirectToRoute('successful_contact', ['uuid' => $uuid]);
}
$operation = $this->getDoctrine()
->getRepository(Operation::class)
->find(1);
return $this->render('public/home.html.twig', [
'form' => $form->createView(),
'user' => $user,
'operation' => $operation
]);
}
/**
* @Route("/operation/{oid}/participant/creer", name="purchase_user_create")
*
*/
public function purchaseUserCreate(Request $request, string $oid, UserRepository $userRepository)
{
$operations = $this->getDoctrine()
->getRepository(Operation::class)
->findBy(array('isActive' => 1));
$user = new User();
$form = $this->createForm(UserFormType::class, $user);
$form->remove('password');
$form->remove('userRole');
$form->remove('birthDate');
$form->remove('iban');
$operation = $this->getDoctrine()
->getRepository(Operation::class)->find($oid);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$existingUsers = $this->getDoctrine()
->getRepository(User::class)
->findBy(['email' =>
$form['email']->getData()]);
$existingPurchase = null;
foreach ($existingUsers as $existingUser) {
if ($existingUser) {
$isBlockedUser = $existingUser->getIsBlocked();
if ($isBlockedUser == 1) {
$this->addFlash('danger', 'Vous ne pouvez plus participer aux offres promotionnelles de promobricodeco.com. Pour plus d\'informations, n\'hésitez pas à nous contacter à l\'adresse contact@promobricodeco.com.');
return $this->render('purchase/purchase_user_create.html.twig', [
'form' => $form->createView(),
'operation' => $operation
]);
}
$existingPurchase = $this->getDoctrine()
->getRepository(Purchase::class)
->findOneBy(['author' => $existingUser, 'operation' => $oid]);
}
if ($existingPurchase !== NULL) {
$this->addFlash('danger', 'Désolé. Cette adresse e-mail est déjà utilisée. Veuillez en indiquer une autre.');
return $this->render('purchase/purchase_user_create.html.twig', [
'form' => $form->createView(),
'operation' => $operation
]);
}
}
// $user->setPassword(md5(rand(1000, 9999)));
// $purchase = new Purchase();
// if ($this->getUser()) {
// //$user = $this->getUser();
// $purchase->setCreatedBy($this->getUser());
// }
// $purchase->setAuthor($user);
// // Generate a unique operation code to identify the purchase submission
// $purchaseCode = $operation->getCode() . "-" . rand(100000, 999999);
// while ($this->getDoctrine()
// ->getRepository('App:Purchase')
// ->findBy(['purchaseCode' => $purchaseCode])
// ) {
// $purchaseCode = $operation->getCode() . "-" . rand(100000, 999999);
// }
// if ($this->getUser()) {
// $purchase->setCreatedBy($this->getUser());
// // POSSIBILITY TO REGISTER FOR ADMIN WITH NO EMAIL
// if ($user->getEmail() === NULL) {
// $code = explode('-', $purchaseCode);
// $customEmail = $code[count($code) - 1] . '@promobricodeco.com';
// $user->setEmail($customEmail);
// }
// }
// $purchase->setPurchaseCode($purchaseCode);
// $purchase->setUuid(Uuid::v4());
// $user->addPurchase($purchase);
// $operation = $this->getDoctrine()
// ->getRepository(Operation::class)
// ->findOneBy(['id' =>
// $oid]);
// $purchase->setOperation($operation);
// if ($user->getIsCgu())
// $user->setIsCguDate(new \DateTime());
// $em = $this->getDoctrine()->getManager();
// $em->persist($user);
// $em->flush();
// //Connected user - admin
// if ($this->getUser()) {
// return $this->redirectToRoute('purchase_receipt_create', [
// 'uuid' => $purchase->getUuid(),
// ]);
// }
// /* return $this->redirectToRoute('purchase_user_create_confirm', [
// 'uuid' => $purchase->getUuid(),
// ]);*/
// return $this->redirectToRoute('operations_check_doublons', [
// 'uuid' => $purchase->getUuid(),
// 'redirect' => 'purchase_user_create_confirm'
// ]);
}
// $today = strftime(date('Y-m-d'));
// $currentUser = $this->getUser();
// if ($currentUser != null) {
// $role = $currentUser->getRoles();
// } else {
// $role = NULL;
// }
// if ($role == NULL and $operation->getOpenUntil()->format('Y-m-d') < $today) {
// return $this->render('application/operation-finished.html.twig', [
// 'form' => $form->createView(),
// 'operation' => $operation,
// 'operations' => $operations,
// 'privacyText' => $this->privacyText,
// ]);
// } else {
// return $this->render('purchase/purchase_user_create.html.twig', [
// 'form' => $form->createView(),
// 'operation' => $operation
// ]);
// }
}
/**
* @Route("/connexion", name="connexion")
*/
public function login(Request $request, AuthenticationUtils $authUtils)
{
$error = $authUtils->getLastAuthenticationError();
$lastUsername = $authUtils->getLastUsername();
return $this->render('security/login.html.twig', array(
'last_username' => $lastUsername,
'error' => $error,
));
}
/**
* @Route("/recapitulatif", name="recapitulatifs")
*/
public function recapitulatifs(UserRepository $userRepository, PurchaseRepository $participationRepository)
{
$session = $this->get('session');
$idUser = $session->get('id');
$p = null;
// $p = $participationRepository->getUserPurchase($idUser);
$participation = $participationRepository->findAll();
//$recapitulatifs = $this->getDoctrine()->getRepository(Users::class)->findALl();
$recapitulatifs = null;
return $this->render('public/recapitulatif.html.twig', [
'recapitulatifs' => $recapitulatifs,
'p' => $p,
]);
}
/**
* @Route("/enregistre", name="enregistres")
*/
public function enregistres()
{
return $this->render('public/enregistre.html.twig');
}
/**
* @Route("/operation/{oid}/suivi", name="purchase_status")
* @ParamConverter("operation", options={"mapping"={"oid"="id"}})
*/
public function purchaseStatus(Operation $operation, Request $request, PurchaseRepository $purchaseRepository)
{
$purchase = [];
$form = $this->createForm(PurchaseStatusType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$purchase = $purchaseRepository->findOneBy(array('operation' => $operation, 'purchaseCode' => $form->get('purchaseCode')->getData()));
/* $purchase = $this->getDoctrine()
->getRepository('App:Purchase')
->findOneBy(['purchaseCode' => $form->get('purchaseCode')->getData()]);*/
/*if ($purchase) {
$status = $purchase->getStatus();
switch ($status) {
/*case 0:
$this->addFlash(
'notice',
'Nous n\'enregistrons aucun dossier de participation associé à ce numéro.'
);
break;*/
/* case $status === self::PURCHASE_SUBMIT_OK: //EN ATTENTE DE VALIDATION
$this->addFlash(
'info',
'Votre dossier de participation a été soumis le ' . $purchase->getCreatedAt()->format('d/m/Y') . '. Votre dossier est en cours de traitement.'
);
break;
case $status === self::PURCHASE_ACCEPTED: //VALIDE
$this->addFlash(
'success',
'Votre dossier de participation a été soumis le ' . $purchase->getCreatedAt()->format('d/m/Y') . '.
Votre dossier a été validé le ' . $purchase->getActionAt()->format('d/m/Y') . '. Vous recevrez votre remboursement sous 8 à 10 semaines.'
);
break;
case $status === self::PURCHASE_DECLINED: //INVALIDE
$this->addFlash(
'warning',
'Votre dossier de participation a été soumis le ' . $purchase->getCreatedAt()->format('d/m/Y') . '.
Malheureusement votre dossier n\'est pas conforme. Pour toute question veuillez nous envoyer un e-mail à contact@promobricodeco.com'
);
break;
}
} else {
$this->addFlash(
'notice',
'Nous n\'enregistrons aucun dossier de participation associé à ce numéro.'
);
}
}*/
}
return $this->render('public/suivreMonDossier.html.twig', [
'form' => $form->createView(),
'purchase' => $purchase,
'operation' => $operation
]);
}
/**
* @Route("/participation-enregistree", name="participation_rules")
*/
public function operationExplication()
{
return $this->render('public/participation-enregistree.html.twig');
}
/**
* @Route("/participation/{uuid}/preuve/creer", name="purchase_receipt_create")
* @ParamConverter("purchase", options={"mapping"={"uuid"="uuid"}})
*/
public function participation(Purchase $participation, Request $request, PurchaseRepository $participationRepository, UserRepository $userRepository, EmailService $emailService)
{
$user = $participation->getAuthor();
if (count($participation->getProductPurchases()) == 0) {
$productPurchase = new ProductPurchase();
$participation->addProductPurchase($productPurchase);
}
$formPurchase = $this->createForm(PurchaseFormType::class, $participation);
$formPurchase->handleRequest($request);
if ($formPurchase->isSubmitted() && $formPurchase->isValid()) {
if (($formPurchase->getData()->getPurchasedAt() > new \DateTime('2022-06-30')) || ($formPurchase->getData()->getPurchasedAt() < new \DateTime('2022-05-02'))) {
$this->addFlash(
'danger',
"Pour participer à l'opération votre achat doit être effectué entre le 02/05/2022 et le 30/06/2022"
);
return $this->redirectToRoute('purchase_receipt_create', [
'uuid' => $participation->getUuid(),
]);
}
$participation->setAuthor($user);
$operation = $this->getDoctrine()
->getRepository(Operation::class)
->find(1);
$participation->setOperation($operation);
$participation->setCreatedAt(new \DateTime());
$em = $this->getDoctrine()->getManager();
$em->persist($participation);
$em->flush();
$email = $user->getEmail();
$subject = 'Merci pour votre particicipation';
$send = $emailService->send(
$email,
$subject,
$this->renderView(
'emails/receipt-confirm.html.twig',
[
'reference' => $participation->getPurchaseCode(),
'operation' => $operation
]
)
);
$this->addFlash('success', true);
return $this->redirectToRoute('successful_participation', [
'uuid' => $participation->getUuid()
]);
}
$operation = $this->getDoctrine()
->getRepository(Operation::class)
->find(1);
return $this->render('public/je-participe.html.twig', [
'formPurchase' => $formPurchase->createView(),
'operation' => $operation
]);
}
/**
* @Route("/reglement", name="rules")
*/
public function rules()
{
return $this->render('public/reglement.html.twig');
}
/**
* @Route("/mentions-legales", name="terms_of_use")
*/
public function termsOfUse()
{
return $this->render('public/mentions-legales.html.twig');
}
/**
* @Route("/cookies-et-confidentialite", name="cookies")
*/
public function cookiesEtConfidentialite()
{
return $this->render('public/cookies-et-confidentialite.html.twig');
}
/**
* @Route("/contact", name="contact")
*/
public function contact(Request $request, UserRepository $userRepository, EmailService $emailService)
{
$user = new User();
$form = $this->createForm(UserFormType::class);
$user = new Contact();
$form = $this->createForm(ContactFormType::class);
$form->remove('gender');
$form->remove('purchases');
$form->remove('address');
$form->remove('address2');
$form->remove('postalCode');
$form->remove('city');
$form->remove('isCgu');
$form->remove('isPartnerCgu');
$form->remove('isNewsletter');
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user = $form->getData();
// $object = $form->get('contacts')->get('__name__')->get('subject')->getData();
// $message = $form->get('contacts')->get('__name__')->get('message')->getData();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
$emailTo = 'test@data-gest.fr';
$subject = "Nouvelle question sur Mes Instants Gagnants Pierre Lannier";
$send = $emailService->send(
$emailTo,
$subject,
$this->renderView(
'emails/new-contact.html.twig',
[
'subject' => $form->get('subject')->getData(),
'lastName' => $form->get('lastName')->getData(),
'firstName' => $form->get('firstName')->getData(),
'email' => $form->get('email')->getData(),
'phoneNumber' => $form->get('phoneNumber')->getData(),
'message' => $form->get('message')->getData(),
]
)
);
return $this->redirectToRoute('successful_msg');
}
return $this->render('public/contact.html.twig', ['form' => $form->createView()]);
}
/**
* @Route("/modalites_lastminute", name="modality_last_minute")
*/
public function modalityLastMinute()
{
return $this->render('public/modalities-lastminute.html.twig');
}
/**
* @Route("/participation/{uuid}/preuve/confirmer", name="successful_participation")
* @ParamConverter("purchase", options={"mapping"={"uuid"="uuid"}})
*/
public function successfulPurchase(Request $request, Purchase $participation)
{
$flashbag = $this->get('session')->getFlashBag();
$success = $flashbag->get("success");
if(!$success) {
return $this->redirectToRoute('home');
}
$operation = $this->getDoctrine()
->getRepository(Operation::class)
->find(1);
$reference = $participation->getPurchaseCode();
return $this->render(
'public/participation_confirmation.html.twig',
[
'reference' => $reference,
'operation' => $operation
]
);
}
/**
* @Route("/participation/{uuid}/participant/confirmer", methods="GET", name="successful_contact")
*/
public function successful(Request $request)
{
$flashbag = $this->get('session')->getFlashBag();
$success = $flashbag->get("success");
if(!$success) {
return $this->redirectToRoute('home');
}
$operation = $this->getDoctrine()
->getRepository(Operation::class)
->find(1);
return $this->render('public/participation-enregistree.html.twig', [
'operation' => $operation
]);
}
/**
* @Route("/contact-success", name="successful_msg")
*/
public function successfulContact()
{
return $this->render('public/contact-enregistree.html.twig');
}
}