<?php
namespace App\Service;
use App\Entity\ReviewerSettings;
use App\Entity\User;
use App\Service\User\UserService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Serializer\SerializerInterface;
class ReviewerSettingsService extends BaseEntityService
{
/**
* @var UserService
*/
private $userService;
public function __construct(EntityManagerInterface $em, UserService $userService,
ServiceRetriever $serviceRetriever, SerializerInterface $serializer = null)
{
parent::__construct($em, $serializer, $serviceRetriever);
$this->initialize(ReviewerSettings::class);
$this->userService = $userService;
}
public function getCurrentReviewerSettings(): ReviewerSettings
{
$reviewer = $this->userService->getCurrentReviewer();
$reviewerSettings = $this->createOrGet($reviewer);
return $reviewerSettings;
}
public function createOrGet(User $user): ReviewerSettings
{
$settings = $this->getFirst(['user' => $user]);
if (!$settings) {
$settings = new ReviewerSettings();
$settings->setUser($user);
$this->saveDefault($settings);
}
return $settings;
}
public function getCurrentReviewerSettingsJsonStr(): string
{
$reviewerSettings = $this->getCurrentReviewerSettings();
$excludeFields = ['id', 'user', 'candidateRecommendations', "candidateDeclineComments"];
$reviewerSettingsJsonStr = $this->serializeDefault($reviewerSettings, null, $excludeFields);
return $reviewerSettingsJsonStr;
}
public function getCurrentReviewerSettingsForm(): FormInterface
{
$formFactory = $this->serviceRetriever->getFormFactory();
$reviewerSettings = $this->getCurrentReviewerSettings();
$form = $formFactory->create(\App\Form\ReviewerSettingsType::class, $reviewerSettings);
return $form;
}
}