<?php
namespace OceanExpertBundle\EventListener;
use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
use Symfony\Component\HttpFoundation\RequestStack;
use Doctrine\ORM\EntityManager;
use OceanExpertBundle\Entity\ProfileImages;
use OceanExpertBundle\Entity\Indiv;
use OceanExpertBundle\Entity\IndivInstitution;
use OceanExpertBundle\Entity\Institutions;
/**
* JWTCreatedListener
*
* @author Nicolas Cabot <n.cabot@lexik.fr>
*/
class JWTCreatedListener
{
protected $em;
/**
* @var RequestStack
*/
private $requestStack;
/**
* @param RequestStack $requestStack
*/
public function __construct(RequestStack $requestStack,EntityManager $em)
{
$this->requestStack = $requestStack;
$this->em = $em;
$this->request = $this->requestStack->getCurrentRequest();
}
/**
* @param JWTCreatedEvent $event
*
* @return void
*/
public function onJWTCreated(JWTCreatedEvent $event)
{
$payload = $event->getData();
$payload['userdetails'] = $this->getExpertDetailsById($this->em,$payload['email']);
$event->setData($payload);
}
function getExpertDetailsById($em,$email){
$member = $em
->getRepository('OceanExpertBundle:Indiv')
->createQueryBuilder('i')
->select('i.idInd,i.fname,i.sname,i.email1,i.jobtitle,ins.idInst,ins.instName,ins.instNameEng,i.useInstAddr,ci.country as insCountry,c.country')
->leftJoin('OceanExpertBundle:IndivInstitution', 'ii', 'WITH', 'ii.idInd = i.idInd')
->leftJoin('OceanExpertBundle:Institutions', 'ins', 'WITH', 'ii.idInst = ins.idInst')
->leftJoin('OceanExpertBundle:Countries', 'c', 'WITH', 'i.countryCode = c.idCountry')
->leftJoin('OceanExpertBundle:Countries', 'ci', 'WITH', 'ins.countryCode = ci.idCountry')
->where('i.email1 = :email')
->andWhere('i.status = 1')
->setParameter('email',$email)
->getQuery()
->getResult();
$memberdata = array();
if($member){
$query = $em
->getRepository('OceanExpertBundle:MemberGroups')
->createQueryBuilder('m')
->select('m.idGroup,g.groupname')
->leftJoin('OceanExpertBundle:Groups', 'g', 'WITH', 'g.idGroup = m.idGroup')
->where('m.idInd =:idInd')
->setParameter('idInd', $member[0]['idInd'])
->getQuery();
$groups = $query->getResult();
$memberdata['idInd'] = $member[0]['idInd'];
$memberdata['fname'] = $member[0]['fname'];
$memberdata['sname'] = $member[0]['sname'];
if (file_exists("uploads/profile/profile_" . $member[0]['idInd'].'.png')){
$memberdata['image'] =$this->request->server->get('HTTP_HOST') . "/uploads/profile/profile_" . $member[0]['idInd'].".png";
}else{
$memberdata['image'] = $this->request->server->get('HTTP_HOST') . "/assets/uploads/default.png";
}
$memberdata['name'] = $member[0]['fname']." ".$member[0]['sname'];
$memberdata['jobtitle'] = $member[0]['jobtitle'];
$memberdata['idInst'] = $member[0]['idInst'];
$memberdata['instName'] = $member[0]['instName'];
$memberdata['instNameEng'] = $member[0]['instNameEng'];
$memberdata['insCountry'] = $member[0]['insCountry'];
$memberdata['country'] = $member[0]['insCountry'];
$memberdata['groups'] = $groups;
}else{
$memberdata['error'] = "No memberdata available.";
}
return $memberdata;
}
}