<?php
/**
* Created by PhpStorm.
* User: SUSAN MEDINA
* Date: 22/03/2019
* Time: 02:42 PM
*/
namespace App\EventSubscriber\User;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use ApiPlatform\Core\EventListener\EventPriorities;
use App\Repository\App\VendorRepository;
use App\Services\UserService;
class UserPostSerializerSubscriber implements EventSubscriberInterface
{
private $userService;
private $vendorRepository;
public function __construct(
UserService $userService,
VendorRepository $vendorRepository
){
$this->userService = $userService;
$this->vendorRepository = $vendorRepository;
}
public function onKernelView(ViewEvent $event)
{
$request = $event->getRequest();
$userResult = $event->getControllerResult();
$route = $request->attributes->get('_route');
$routesItem = array(
'api_users_post_collection',
'api_users_get_item',
'api_users_put_item',
'api_users_put_notification_configuration_item'
);
$routesCollection = array(
'api_users_get_collection',
'api_users_get_taskmasters_collection',
'api_users_get_operators_collection'
);
if (!in_array($route, array_merge($routesItem, $routesCollection)))
return;
$vendor = null;
$vendorId = $request->query->get('vendorStaff_vendor');
$data = json_decode($request->getContent(), true);
if (isset($data['vendor']) &&
('api_users_post_collection' == $route || 'api_users_put_item' == $route)
) {
$vendorId = $data['vendor'];
}
if ($vendorId) {
$vendor = $this->vendorRepository->find($vendorId);
}else if($route == 'api_users_put_notification_configuration_item'){
$vendor = $request->get('data')->getVendorStaff()[0]->getVendor();
}
$userResult = json_decode($userResult, true);
if (in_array($route, $routesCollection)) {
foreach ($userResult as &$user) {
$user = $this->userService->formatNormalize($user, $vendor, $route, $request);
}
} else {
$userResult = $this->userService->formatNormalize($userResult, $vendor, $route, $request);
}
$userResult = json_encode($userResult);
$event->setControllerResult($userResult);
}
public static function getSubscribedEvents()
{
return [
KernelEvents::VIEW => ['onKernelView', EventPriorities::POST_SERIALIZE]
];
}
}