<?php
namespace App\DataProvider;
use ApiPlatform\Core\DataProvider\ItemDataProviderInterface;
use ApiPlatform\Core\DataProvider\RestrictedDataProviderInterface;
use App\DataProvider\Traits\CompanyRestrictedTrait;
use App\DataTransformer\AboutMeTransformer;
use App\Entity\User;
use App\Request\AboutMeRequest;
use App\Security\CompanyUserProvider;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Finder\Exception\AccessDeniedException;
use Symfony\Component\Security\Core\Security;
class AboutMeDataProvider implements
RestrictedDataProviderInterface,
ItemDataProviderInterface
{
use CompanyRestrictedTrait;
/**
* @var AboutMeTransformer
*/
private $transformer;
/**
* AboutMeDataProvider constructor.
*
* @param Security $security
* @param CompanyUserProvider $userProvider
* @param AboutMeTransformer $transformer
*/
public function __construct(
Security $security,
CompanyUserProvider $userProvider,
AboutMeTransformer $transformer,
EntityManagerInterface $entityManager,
) {
$this->security = $security;
$this->userProvider = $userProvider;
$this->transformer = $transformer;
$this->entityManager = $entityManager;
}
public function getItem(string $resourceClass, $id, string $operationName = null, array $context = [])
{
$company = $this->getCompany();
if ($company === null) {
throw new AccessDeniedException('Cannot get company from user');
}
/**
* @var $user User
*/
$user = $this->security->getUser();
return $this->transformer->transform($user);
}
public function supports(string $resourceClass, string $operationName = null, array $context = []): bool
{
return AboutMeRequest::class === $resourceClass;
}
}