<?php
namespace App\Controller\AppBundle\Helpers\Admin;
use App\Entity\Consultant;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Container\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
class ConsultantHelper
{
/**
* Check wheter a consultant can log in with the given credentials.
* @param $username string
* @param $password string
* @param EntityManagerInterface $em
* @return Consultant|bool
*/
public static function checkLoginCredentials($username, $password, EntityManagerInterface $em, UserPasswordHasherInterface $passwordHasher)
{
/* @var $consultant \App\Entity\Consultant */
$consultant = $em->getRepository(Consultant::class)->findOneByUsername($username);
if (!$consultant || !$passwordHasher->isPasswordValid($consultant, $password)) {
return false;
}
return $consultant;
}
/**
* Lets the consultant log in on session
* @param Consultant $consultant
* @param ContainerInterface $container
*/
public static function login(Consultant $consultant, SessionInterface $session)
{
$session->set('consultant', $consultant);
}
/**
* To check wheter a consultant is logged in or not
* @param ContainerInterface $container
* @return bool
*/
public static function isLoggedIn(ContainerInterface $container)
{
return $container->get('session.handler.native_file')->has('consultant');
}
/**
* To check wheter a consultant is logged in or not
* @param ContainerInterface $container
* @return bool
*/
public static function isLoggedInSession(SessionInterface $session)
{
return $session->has('consultant');
}
/**
* If the consultant is logged in, he will be logged out
* @param ContainerInterface $container
* @throws \Exception
*/
public static function logout(SessionInterface $session)
{
if (ConsultantHelper::isLoggedInSession($session)) {
$session->clear();
// $container->get('security.token_storage')->setToken(null);
} else {
throw new \Exception('Consultant is niet ingelogd');
}
}
/**
* Gets current logged in consultant
* @param ContainerInterface $container
* @return Consultant
* @throws \Exception
*/
public static function getLoggedInConsultant(Request $request, EntityManagerInterface $em)
{
if (ConsultantHelper::isLoggedInSession($request->getSession()) && $request->getSession()->get('consultant')->getUsername() !== null) {
/** @var Consultant $consultant */
$consultantName = $request->getSession()->get('consultant')->getUsername();
$consultant = $em->getRepository(Consultant::class)->findOneByUsername($consultantName);
return $consultant;
} else {
return false;
}
}
}