src/Controller/LettreController.php line 147

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\ClassTheatre\asides;
  4. use App\ClassTheatre\TheatreController;
  5. use App\Service\Functions;
  6. use App\Service\TheatreMail\TheatreMail;
  7. use App\Validator\Recaptcha;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Psr\Log\LoggerInterface;
  10. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  11. use Symfony\Component\Form\Extension\Core\Type\FormType;
  12. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  13. use Symfony\Component\Form\Extension\Core\Type\TextType;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  18. use Symfony\Contracts\Translation\TranslatorInterface;
  19. use Symfony\Component\Validator\Constraints\Email;
  20. use Symfony\Component\Validator\Constraints\Length;
  21. use Symfony\Component\Validator\Constraints\NotBlank;
  22. use TheatreCore\Entity\Extranetusers;
  23. use TheatreCore\Entity\Newsletters;
  24. use TheatreCore\Entity\Subscribers;
  25. use TheatreCore\Form\Type\RecaptchaType;
  26. class LettreController extends TheatreController
  27. {
  28.     // objet newsletters
  29.     public $newsletters null;
  30.     // objet abonnés / subscribers
  31.     public $subscribers null;
  32.     private $logger;
  33.     // {{{ _construct()
  34.     /** constructeur hérité
  35.      *
  36.      */
  37.     public function __construct(
  38.         EntityManagerInterface $em,
  39.         TranslatorInterface $translator,
  40.         TokenStorageInterface $tokenStorage,
  41.         Functions $func,
  42.         TheatreMail $TheatreMail,
  43.         LoggerInterface $logger
  44.     )
  45.     {
  46.         // surbrillance du menu principal (thnet)
  47.         $GLOBALS['rub_courante'] = 'index';
  48.         parent::__construct($translator$tokenStorage);
  49.         $GLOBALS['editset'] = 'lettre';
  50.         $this->context['controller'] = 'lettre';
  51.         $this->em $em;
  52.         $this->func $func;
  53.         $this->TheatreMail $TheatreMail;
  54.         $this->asides = new asides();
  55.         $this->logger $logger;
  56.     }
  57.     public function InitController($request null)
  58.     {
  59.         // raccourcis
  60.         /* Lettre thnet, par défaut */
  61.         $newsletters_set = array('thnet');
  62.         $newsletters_opt = array();
  63.         $orig 'thnet';
  64.         $newsletter 'thnet';
  65.         // obtenir les labels
  66.         $this->newsletters $this->em->getRepository(Newsletters::class);
  67.         $lettres_desc $this->newsletters->getNewsletters(null, array('identifier''name'));
  68.         $lettres_label = array();
  69.         foreach ($lettres_desc as $lettre) {
  70.             $lettres_label[$lettre['identifier']] = $lettre['name'];
  71.         }
  72.         // demande une lettre d'infos spécifique
  73.         if (!empty($_REQUEST['newsletter'])) {
  74.             // par defaut : la lettre demandée + thnet en option
  75.             if (array_key_exists($_REQUEST['newsletter'], $lettres_label) && $_REQUEST['newsletter'] != 'thnet') {
  76.                 $rq_newsletter $_REQUEST['newsletter'];
  77.                 $newsletters_set = array($rq_newsletter);
  78.                 $newsletters_opt = array('thnet' => array('label' => $lettres_label['thnet'], 'default' => 1));
  79.                 $orig $rq_newsletter;
  80.                 $newsletter $orig;
  81.                 $this->view->lettre_name $lettres_label[$rq_newsletter];
  82.                 $this->view->{'type_' $rq_newsletter} = true;
  83.                 $newsletter_image_path getenv('PATH_IMG') . 'menu/logo/' $newsletter '.jpg';
  84.                 if (file_exists($newsletter_image_path)) {
  85.                     $this->view->newsletter_image $newsletter '.jpg';
  86.                 }
  87.             }
  88.         }
  89.         $this->view->newsletter $newsletter;
  90.         $this->view->newsletter_label $lettres_label[$newsletter];
  91.         $this->view->newsletters_set $newsletters_set;
  92.         $this->view->newsletters_opt $newsletters_opt;
  93.         $this->view->orig $orig;
  94.         // origine de l'inscript et lien de retour
  95.         if (!empty($_REQUEST['nlfrom'])) {
  96.             $this->view->nlfrom $_REQUEST['nlfrom'];
  97.             $this->view->backurl urldecode($_REQUEST['nlfrom']);
  98.         }
  99.         // table  des abonnés
  100.         $this->subscribers $this->em->getRepository(Subscribers::class);
  101.         // le formulaire d'inscription
  102.         $this->formInscription($request);
  103.         //print_r($_POST);
  104. //        $submit = !empty($_REQUEST['inscription']);
  105.         // si le formulaire est bien rempli
  106.         if ($this->context['form']->isSubmitted() && $this->context['form']->isValid()) {
  107.             $this->validate();
  108.         }
  109.     }
  110.     // {{{ finalizeAction()
  111.     /** Code exécuté après chaque action
  112.      *
  113.      *
  114.      * @access protected
  115.      * @return void
  116.      */
  117.     protected function finalizeAction()
  118.     {
  119.         $this->view->aside $this->asides->view($this->view);
  120.     }
  121.     /**
  122.      * @Route("/lettre/inscription", name="lettre_inscription")
  123.      */
  124.     public function inscription()
  125.     {
  126.         return $this->redirectToRoute('index', [], Response::HTTP_MOVED_PERMANENTLY);
  127.     }
  128.     public function formInscription($request null)
  129.     {
  130.         // retrouver les infos sur les user
  131.         $user_infos $this->getUser();
  132.         $this->context['formFactory'] = $this->get('form.factory')->createBuilder(FormType::class, null, [
  133.             'attr' => [
  134.                 'id' => 'masterform'
  135.             ]
  136.         ]);
  137.         // elements du formulaire
  138.         $this->context['formFactory']->add('email'TextType::class, [
  139.             'label' => 'Votre adresse de courriel',
  140.             'constraints' => [
  141.                 new NotBlank([
  142.                     'message' => 'Votre adresse de courriel : veuillez préciser votre adresse de courriel'
  143.                 ]),
  144.                 new Email([
  145.                     'message' => 'Votre adresse de courriel : veuillez verifier votre adresse de courriel'
  146.                 ])
  147.             ],
  148.             'attr' => [
  149.                 'size' => '40',
  150.                 'id' => 'email'
  151.             ]
  152.         ]);
  153.         $this->context['formFactory']->add('pays'ChoiceType::class, [
  154.             'label' => 'Votre pays',
  155.             'choices' => $this->subscribers->getCountryList(),
  156.             'constraints' => [
  157.                 new NotBlank([
  158.                     'message' => 'Pays : veuillez préciser le pays'
  159.                 ]),
  160.                 new Length([
  161.                     'max' => 2,
  162.                     'maxMessage' => 'Pays : veuillez préciser le pays'
  163.                 ])
  164.             ],
  165.             'attr' => [
  166.                 'id' => 'pays'
  167.             ]
  168.         ]);
  169.         if (empty($_POST['pays'])) {
  170.             $this->context['formFactory']->setData(array('pays' => 'FR'));
  171.         }
  172.         $this->context['formFactory']->add('inscription'SubmitType::class, [
  173.             'label' => 'Inscription',
  174.             'attr' => [
  175.                 'class' => 'boutform'
  176.             ]
  177.         ]);
  178.         // captcha
  179.         if ($_ENV['CAPTCHA_ACTIVE'] && !($this->getUser() instanceof Extranetusers)) {
  180.             $this->context['formFactory']->add('recaptcha'RecaptchaType::class, [
  181.                 'mapped' => false,
  182.                 'empty_data' => '1',
  183.                 'constraints' => [
  184.                     new Recaptcha([
  185.                         'request' => $request
  186.                     ])
  187.                 ]
  188.             ]);
  189.         }
  190.         // on a le mail ou c'est un abonné connecté
  191.         if (!empty($_GET['email'])) {
  192.             $this->context['formFactory']->setData(array('email' => $_GET['email']));
  193.         } elseif ($user_infos instanceof Extranetusers && !empty($user_infos->getEmail())) {
  194.             $this->context['formFactory']->setData(array('email' => $user_infos->getEmail()));
  195.         }
  196.         $this->context['form'] = $this->context['formFactory']->getForm();
  197.         $this->context['form']->handleRequest($request);
  198.     }
  199.     public function validate()
  200.     {
  201.         $error = &$this->context['error'];
  202.         $reponse = &$this->context['reponse'];
  203.         // formatage des majuscules minuscules slash et globales
  204.         $email addslashes(strtolower($this->context['form']->get('email')->getData()));
  205.         // origine de l'inscription
  206.         if (!empty($_POST['orig'])) {
  207.             $orig $_POST['orig'];
  208.         } else {
  209.             $orig 'thnet';
  210.         }
  211.         if (!empty($_POST['lang'])) {
  212.             $lang $_POST['lang'];
  213.         } else {
  214.             $lang 'fr';
  215.         }
  216.         $pays $this->context['form']->get('pays')->getData();
  217.         // definition des champs de la table
  218.         $valeur_champs = array(
  219.             $lang => 1,
  220.         );
  221.         //print_r($_POST);
  222.         $lettres array_keys($_POST['lettre']);
  223.         if (!empty($lettres)) {
  224.             // verifier si l'utilisateur n'est pas déjà inscrit à une des lettres
  225.             foreach ($lettres as $k => $l) {
  226.                 if ($this->subscribers->isSubscriber($email$l)) {
  227.                     unset($lettres[$k]);
  228.                     $lettres_inscrit[$k] = $l;
  229.                 }
  230.             }
  231.             // liste des lettres déjà abonné
  232.             if (!empty($lettres_inscrit)) {
  233.                 $lettres_inscrit_desc $this->newsletters->getNewsletters($lettres_inscrit, array('identifier''name'));
  234.                 $liste_lettres_inscrit = array();
  235.                 foreach ($lettres_inscrit_desc as $lettre) {
  236.                     $liste_lettres_inscrit[] = $lettre['name'];
  237.                 }
  238.                 $reponse['inscription_deja'] = $this->context['tr']->trans('inscription_lettre_deja', ['slug_lettre' => implode($liste_lettres_inscrit', ')]);
  239.                 $this->view->inscription_ok true;
  240.             }
  241.         }
  242.         if (!empty($lettres)) {
  243.             //$subscribers->set_debug(true);
  244.             // incription aux lettres
  245.             $success $this->subscribers->setSubscribe($email$lettres$pays$orig$valeur_champs);
  246.             // ok
  247.             if ($success) {
  248.                 $lettres_desc $this->newsletters->getNewsletters($lettres, array('identifier''name'));
  249.                 $liste_lettres = array();
  250.                 foreach ($lettres_desc as $lettre) {
  251.                     $liste_lettres[] = $lettre['name'];
  252.                 }
  253.                 $reponse['inscription_ok'] = $this->context['tr']->trans('inscription_lettre_ok', ['slug_lettre' => implode($liste_lettres', ')]);
  254.                 $this->view->inscription_ok true;
  255.             } else {
  256.                 $error['inscription_no'] = $this->context['tr']->trans('erreur_enregistrement');
  257.             }
  258.             // si inscription OK, on envoie un mail
  259.             if (empty($error) && $success) {
  260.                 // envoi du message
  261.                 $this->TheatreMail->setDestinataire($email); // destinataire
  262.                 $this->TheatreMail->setExpediteur(getenv('CONTACT_MAIL')); // expediteur et return-path
  263.                 $this->TheatreMail->setSubject($this->context['tr']->trans('inscription_lettre_sujet'));
  264.                 // adresse de la page de desincription
  265.                 $desth getenv('URL_THNET') . '/lettre/desinscription';
  266.                 // texte de la nl
  267.                 $params_tr = array(
  268.                     'lettre' => implode($liste_lettres"\r\n"),
  269.                     'desinscrire' => $desth
  270.                 );
  271.                 $this->TheatreMail->prepare(
  272.                     'emails/inscription_lettre.html.twig',
  273.                     $params_tr,
  274.                     'emails/inscription_lettre.txt.twig'
  275.                 );
  276.                 // envoi
  277.                 try {
  278.                     $this->TheatreMail->send();
  279.                     $reponse['ok'] = 'Message de confirmation envoyé.';
  280.                 } catch (\Exception $e) {
  281.                     $this->logger->error($e->getMessage());
  282.                     $this->logger->debug(($e->getTraceAsString()));
  283.                 }
  284.             }
  285.         }
  286.         $this->view->reponse $reponse;
  287.     }
  288. }