<?php
namespace App\CIC\EventSubscriber;
use ApiPlatform\Core\EventListener\EventPriorities;
use App\CIC\Service\School\cicMaintainStudentSchoolService;
use App\Entity\School\Student\StudentAcademic;
use App\Entity\School\Student\StudentProfile;
use App\Event\DepartmentChangeEvent;
use App\Event\School\Student\StudentProfileChangeEvent;
use App\Event\School\Student\StudentProfilePortalLoginChangeEvent;
use App\Service\Loader\Legacy\StudentWriterService;
use CIC\DB\envLoader\db;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class createPortalStudentProfileCreatedSubscriber implements EventSubscriberInterface
{
private cicMaintainStudentSchoolService $service;
private EventDispatcherInterface $dispatcher;
private LoggerInterface $logger;
public static function getSubscribedEvents()
{
return [
StudentProfileChangeEvent::class => [
['onCreate']
],
KernelEvents::VIEW => ['apiChange',24],
];
}
public function __construct(cicMaintainStudentSchoolService $service, EventDispatcherInterface $dispatcher, LoggerInterface $logger)
{
$this->service = $service;
$this->dispatcher = $dispatcher;
$this->logger = $logger;
}
public function onCreate(StudentProfileChangeEvent $event)
{
$this->createLogin($event->getStudent());
}
public function apiChange(ViewEvent $event) {
$this->logger->info('[eRep] api_Change');
$object=$event->getControllerResult();
$method=$event->getRequest()->getMethod();
if(!$object instanceof StudentProfile) {
return;
}
$this->logger->info(sprintf(
'[eRep] DEV TESTing: Create Login called %s: %s',
$object->getId(),
$method
));
if($method==Request::METHOD_POST)
$this->createLogin($object);
}
function createLogin(StudentProfile $student)
{
$this->logger->info(sprintf(
'[eRep] Create Login called %s: %s',
$student->getStudentNumber(),
$student->getId()
));
if(!$student->getStudentPortalUser()) {
$this->service->createPortalLogin($student);
if($student->getStudentPortalUser()) {
$event=new StudentProfilePortalLoginChangeEvent($student);
$this->dispatcher->dispatch($event);
}
}
}
}