<?php
/*
* This file is part of the FOSUserBundle package.
*
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace App\Controller;
use App\Entity\User;
use App\Service\UserManager;
use FOS\UserBundle\Event\FilterUserResponseEvent;
use FOS\UserBundle\Controller\ResettingController as BaseController;
use FOS\UserBundle\Event\FormEvent;
use FOS\UserBundle\Event\GetResponseUserEvent;
use FOS\UserBundle\Form\Factory\FactoryInterface;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Mailer\MailerInterface;
use FOS\UserBundle\Model\UserManagerInterface;
use FOS\UserBundle\Util\TokenGeneratorInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
/**
* Controller managing the resetting of the password.
*
* @author Thibault Duplessis <[email protected]>
* @author Christophe Coevoet <[email protected]>
*/
class ResettingController extends BaseController
{
/** @var EventDispatcherInterface */
private $eventDispatcher;
/** @var FactoryInterface */
private $formFactory;
/** @var UserManagerInterface */
private $userManager;
/**
* @param EventDispatcherInterface $eventDispatcher
* @param FactoryInterface $formFactory
* @param UserManagerInterface $userManager
* @param TokenGeneratorInterface $tokenGenerator
* @param MailerInterface $mailer
* @param int $retryTtl
*/
public function __construct(EventDispatcherInterface $eventDispatcher, FactoryInterface $formFactory, UserManagerInterface $userManager, TokenGeneratorInterface $tokenGenerator, MailerInterface $mailer, $retryTtl)
{
parent::__construct($eventDispatcher, $formFactory, $userManager, $tokenGenerator, $mailer, $retryTtl);
$this->eventDispatcher = $eventDispatcher;
$this->formFactory = $formFactory;
$this->userManager = $userManager;
}
/**
* Reset user password.
*
* @param Request $request
* @param string $token
*
* @return Response
*/
public function resetAction(Request $request, $token)
{
$user = $this->userManager->findUserByConfirmationToken($token);
if (null === $user) {
return new RedirectResponse($this->container->get('router')->generate('fos_user_security_login'));
}
$event = new GetResponseUserEvent($user, $request);
$this->eventDispatcher->dispatch(FOSUserEvents::RESETTING_RESET_INITIALIZE, $event);
if (null !== $event->getResponse()) {
return $event->getResponse();
}
$form = $this->formFactory->createForm();
$form->setData($user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$event = new FormEvent($form, $request);
$this->eventDispatcher->dispatch(FOSUserEvents::RESETTING_RESET_SUCCESS, $event);
$this->userManager->updateUser($user);
if (null === $response = $event->getResponse()) {
$url = $this->generateUrl('fos_user_profile_show', ["user" => $user->getId()]);
$response = new RedirectResponse($url);
}
$this->eventDispatcher->dispatch(
FOSUserEvents::RESETTING_RESET_COMPLETED,
new FilterUserResponseEvent($user, $request, $response)
);
return $response;
}
return $this->render('@FOSUser/Resetting/reset.html.twig', array(
'token' => $token,
'form' => $form->createView(),
));
}
/**
*
* Envoie le mail pour reset le mot de passe à un utilisateur
*
* @Route("admin/profile/resetting-password/{user}", name="app_resetting_send_password", methods={"GET"})
* @param UserManager $userManager
* @param User $user
* @return RedirectResponse
* @throws \Throwable
* @throws \Twig\Error\LoaderError
* @throws \Twig\Error\RuntimeError
* @throws \Twig\Error\SyntaxError
*/
public function sendResettingPassword(UserManager $userManager, User $user)
{
$userManager->sendMailToInitPassword($user, true);
$this->addFlash("success", "Le mail a été envoyer à " . $user->getEmail() . " !");
return $this->redirectToRoute("fos_user_profile_edit", ['user' => $user->getId()]);
}
}