<?php
namespace App\Controller\Api;
use App\Entity\Institution;
use App\Entity\InstitutionAppPersonalization;
use App\Entity\User;
use App\Service\InstitutionService;
use App\Service\Rsa;
use App\Service\SerializeService;
use App\Service\Tools;
use Doctrine\ORM\EntityManagerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* Class AccountInstitutionAppPersonalizationController
* @package App\Controller\Api
* @Route(path="/api/account/institution/app/personalization", name="api_account_institution_app_personalization")
* @IsGranted("IS_AUTHENTICATED_FULLY")
*/
class AccountInstitutionAppPersonalizationController extends AbstractController
{
private $em;
private $serializeService;
private $institutionService;
private $rsa;
private $translator;
public function __construct(
EntityManagerInterface $em,
SerializeService $serializeService,
InstitutionService $institutionService,
Rsa $rsa,
TranslatorInterface $translator,
) {
$this->em = $em;
$this->serializeService = $serializeService;
$this->institutionService = $institutionService;
$this->rsa = $rsa;
$this->translator = $translator;
}
/**
* @param InstitutionAppPersonalization $institutionAppPersonalization
* @param Request $request
* @return JsonResponse
* @Route("/{institutionAppPersonalization}", name="find", requirements={"institutionAppPersonalization"="\d+"})
*/
public function find(InstitutionAppPersonalization $institutionAppPersonalization, Request $request)
{
if (!$this->rsa->isValidToken($request->request->get('apiKey'))) {
return new JsonResponse([
'success' => false,
'message' => $this->translator->trans('global.invalidToken'),
]);
}
/** @var User $user */
$user = $this->getUser();
if (!$user->getInstitutions()->contains($institutionAppPersonalization->getInstitution())) {
return new JsonResponse([
'success' => false,
]);
}
return new JsonResponse([
'success' => true,
'institutionAppPersonalization' => $this->serializeService->serializeInstitutionAppPersonalization($institutionAppPersonalization),
]);
}
/**
* @param Request $request
* @return JsonResponse
* @Route("/update", name="update")
*/
public function update(Request $request)
{
if (!$this->rsa->isValidToken($request->request->get('apiKey'))) {
return new JsonResponse([
'success' => false,
'message' => $this->translator->trans('global.invalidToken'),
]);
}
/** @var User $user */
$user = $this->getUser();
/** @var Institution|JsonResponse $institution */
$institution = $this->institutionService->getInstitutionForUser($request, $user);
// Check if a JSON error has been returned
if ($institution instanceof JsonResponse) {
return $institution;
}
$institutionAppPersonalization = $institution->getInstitutionAppPersonalization();
if (is_null($institutionAppPersonalization)) {
$institutionAppPersonalization = new InstitutionAppPersonalization();
$institutionAppPersonalization->setInstitution($institution);
}
$data = Tools::getRequestData($request);
$institutionAppPersonalization->setPrimaryColor($data['primaryColor']);
$institutionAppPersonalization->setPrimaryVariantColor($data['primaryVariantColor']);
$institutionAppPersonalization->setTextOverPrimaryColor($data['textOverPrimaryColor']);
$this->em->persist($institutionAppPersonalization);
$this->em->flush();
return new JsonResponse([
'success' => true,
'user' => $this->serializeService->serializeInstitutionAppPersonalization($institutionAppPersonalization),
'message' => $this->translator->trans('personalize.success'),
]);
}
}