<?php
namespace Lci\BoilerBoxBundle\Listeners;
// Listener effectué sur une registration en succés d'un nouvel utilisateur
use FOS\UserBundle\Event\FormEvent;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Util\TokenGeneratorInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class RegisterSuccessListener implements EventSubscriberInterface
{
private $mailer;
private $tokenGenerator;
private $router;
private $session;
private $logos_directory;
private $backgrounds_directory;
private $dossier_public_directory;
/**
* EmailConfirmationListener constructor.
*
* @param MailerInterface $mailer
* @param TokenGeneratorInterface $tokenGenerator
* @param UrlGeneratorInterface $router
* @param SessionInterface $session
*/
public function __construct($mailer, TokenGeneratorInterface $tokenGenerator, UrlGeneratorInterface $router, SessionInterface $session, $dossier_public_directory, $logos_directory, $backgrounds_directory)
{
$this->mailer = $mailer;
$this->tokenGenerator = $tokenGenerator;
$this->router = $router;
$this->session = $session;
$this->logos_directory = $logos_directory;
$this->backgrounds_directory = $backgrounds_directory;
$this->dossier_public_directory = $dossier_public_directory;
}
/**
* @return array
*/
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess',
);
}
/**
* @param FormEvent $event
*/
public function onRegistrationSuccess(FormEvent $event)
{
/** @var $user \FOS\UserBundle\Model\UserInterface */
$user = $event->getForm()->getData();
// Sauvegarde du fichier logo
// UploadedFile
$logoFile = $event->getForm()->get('logoFile')->getData();
if ($logoFile)
{
$originalFilename = pathinfo($logoFile->getClientOriginalName(), PATHINFO_FILENAME);
// this is needed to safely include the file name as part of the URL
$newFilename = uniqid().'_'.$originalFilename.'.'.$logoFile->guessExtension();
try {
$logoFile->move(
$this->dossier_public_directory . $this->logos_directory,
$newFilename
);
} catch (FileException $e) {
$request->getSession()->getFlashBag()->add('info', "Le fichier n'a pas pu être importé. Veuillez contacter l'administrateur");
}
$user->setlogoFilename($newFilename);
}
// Sauvegarde du fichier smallLogo
// UploadedFile
$smallLogoFile = $event->getForm()->get('smallLogoFile')->getData();
if ($smallLogoFile)
{
$originalSmallFilename = pathinfo($smallLogoFile->getClientOriginalName(), PATHINFO_FILENAME);
// this is needed to safely include the file name as part of the URL
$newSmallFilename = uniqid().'_'.$originalSmallFilename.'.'.$smallLogoFile->guessExtension();
try {
$smallLogoFile->move(
$this->dossier_public_directory . $this->logos_directory,
$newSmallFilename
);
} catch (FileException $e) {
$request->getSession()->getFlashBag()->add('info', "Le fichier (petit logo) n'a pas pu être importé. Veuillez contacter l'administrateur");
}
$user->setSmallLogoFilename($newSmallFilename);
}
// Sauvegarde du fichier backgroundLogo
// UploadedFile
$backgroundFile = $event->getForm()->get('backgroundFile')->getData();
if ($backgroundFile)
{
$originalBackgroundFilename = pathinfo($backgroundFile->getClientOriginalName(), PATHINFO_FILENAME);
$newBackgroundFilename = uniqid().'_'.$originalBackgroundFilename.'.'.$backgroundFile->guessExtension();
try {
$backgroundFile->move(
$this->dossier_public_directory . $this->backgrounds_directory,
$newBackgroundFilename
);
} catch (FileException $e) {
$request->getSession()->getFlashBag()->add('info', "Le fichier (background) n'a pas pu être importer. Veuillez contacter l'administrateur");
}
$user->setBackgroundFilename($newBackgroundFilename);
}
$user->setEnabled(false);
if (null === $user->getConfirmationToken()) {
$user->setConfirmationToken($this->tokenGenerator->generateToken());
}
//$this->mailer->sendConfirmationEmailMessage($user);
$this->mailer->sendMailRegister($user);
$this->session->set('fos_user_send_confirmation_email/email', $user->getEmail());
$url = $this->router->generate('fos_user_registration_check_email');
//
//**
$event->setResponse(new RedirectResponse($url));
// Stop the later events propagting
$event->stopPropagation();
}
}