<?php
namespace MentalSchool\AppBundle\Controller\Security;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use FOS\UserBundle\Event\FilterUserResponseEvent;
use FOS\UserBundle\Event\FormEvent;
use FOS\UserBundle\Event\GetResponseNullableUserEvent;
use FOS\UserBundle\Event\GetResponseUserEvent;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Model\UserInterface;
use FOS\UserBundle\Util\TokenGeneratorInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
* Student profile controller.
*
* @Route("/")
*/
class SecurityController extends Controller
{
/**
* @Route("/student-disabled-account/{userId}", name="ms_student_show_disabled_account")
*/
public function disabledAction($userId)
{
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('AppBundle:User')->find($userId);
return $this->render('AppBundle:Student:Page/student_disabled.html.twig', ['user' => $user]);
}
/**
* @Route("/teacher-disabled-account/{userId}", name="ms_teacher_show_disabled_account")
*/
public function teacherDisabledAction($userId)
{
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('AppBundle:User')->find($userId);
return $this->render('AppBundle:Student:Page/teacher_disabled.html.twig', ['user' => $user]);
}
/**
* @Route("/student/logout", name="ms_student_logout")
*/
public function logoutAction(Request $request)
{
//clear the token, cancel session and redirect
$locale = $request->getLocale();
$this->get('security.token_storage')->setToken(null);
$request->getSession()->invalidate();
$response = new Response();
$response->headers->clearCookie('REMEMBERME');
$response->send();
$url = $locale == "uk" ? "/" : "/admin/login?locale=$locale";
return $this->redirect($url);
}
/**
* @Route("/reset-password", name="ms_user_reset_password")
*/
public function resetPasswordAction(Request $request)
{
$status = $request->query->get('status') ? $request->query->get('status') : null;
$message = $request->query->get('message') ? $request->query->get('message') : null;
return $this->render('AppBundle:Security:reset-password.html.twig', ["status" => $status, "message" => $message]);
}
/**
* @Route("/send-new-password", name="ms_send_new_password")
*/
public function sendNewPasswordAction(Request $request)
{
$username = $request->request->get('username');
/** @var $user UserInterface */
$user = $this->get('fos_user.user_manager')->findUserByUsernameOrEmail($username);
/** @var $dispatcher EventDispatcherInterface */
$dispatcher = $this->get('event_dispatcher');
/* Dispatch init event */
$event = new GetResponseNullableUserEvent($user, $request);
if (null !== $event->getResponse()) {
return $event->getResponse();
}
$ttl = $this->container->getParameter('fos_user.resetting.retry_ttl');
if (null !== $user && !$user->isPasswordRequestNonExpired($ttl)) {
$entityManager = $this->container->get('doctrine.orm.entity_manager');
$originalPassword = $this->container->get('app.common.service')->getRandomPassword();
$user->setPlainPassword($originalPassword);
$password = $this->get('security.encoder_factory')->getEncoder($user)->encodePassword($originalPassword, $user->getSalt());
$user->setPassword($password);
$entityManager->persist($user);
$entityManager->flush();
$messageData = [
'subject' => $this->container->getParameter('system_name'),
'body' => $this->get('templating')->render(
'AppBundle:Email:resset_password.html.twig',[
'password' => $originalPassword,
'login' => $user->getEmail(),
'locale' => $request->getLocale()
])
];
$this->container->get('app.notification')->sendEmail($messageData, [$user]);
$message = $this->get('translator')->trans('app.reset_password.send_message_success', [], 'app');
return new RedirectResponse($this->generateUrl('ms_user_reset_password', array('status'=> 'success', 'message' => $message)));
}
$message = $this->get('translator')->trans('app.reset_password.send_message_error', [], 'app');
return new RedirectResponse($this->generateUrl('ms_user_reset_password', array('status'=> 'error', 'message' => $message)));
}
}