<?php
namespace App\Service;
use App\Entity\TipSettings;
use App\Entity\User;
use App\Form\TipSettingsType;
use App\Service\User\UserService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Serializer\SerializerInterface;
class TipSettingsService extends BaseEntityService
{
/**
* @var UserService
*/
private $userService;
public function __construct(EntityManagerInterface $em, SerializerInterface $serializer,
UserService $userService, ServiceRetriever $serviceRetriever)
{
parent::__construct($em, $serializer, $serviceRetriever);
$this->initialize(TipSettings::class);
$this->userService = $userService;
}
public function createOrGet(User $user): TipSettings
{
$settings = $this->getFirst(['user' => $user]);
if (!$settings) {
$settings = new TipSettings();
$settings->setUser($user);
$this->saveDefault($settings);
}
return $settings;
}
public function getCurrentReviewerTipSettings(): TipSettings
{
$reviewer = $this->userService->getCurrentReviewer();
$settings = $this->createOrGet($reviewer);
return $settings;
}
public function getCurrentReviewerTipSettingsStr(): string
{
$tipSettings = $this->getCurrentReviewerTipSettings();
$excludeFields = ['id', 'user'];
$tipSettingsJsonStr = $this->serializeDefault(
$tipSettings, null, $excludeFields);
return $tipSettingsJsonStr;
}
public function getCurrentReviewerSettingsForm(): FormInterface
{
$tipSettings = $this-> getCurrentReviewerTipSettings();
$formFactory = $this->serviceRetriever->getFormFactory();
$tipSettingsForm = $formFactory->create(TipSettingsType::class, $tipSettings);
return $tipSettingsForm;
}
public function getCurrentUserTipSettings(): TipSettings
{
$user = $this->userService->getLoggedInUser();
$settings = $this->createOrGet($user);
return $settings;
}
public function getCurrentUserTipSettingsStr(): string
{
$tipSettings = $this->getCurrentUserTipSettings();
$excludeFields = ['id', 'user'];
$tipSettingsJsonStr = $this->serializeDefault(
$tipSettings, null, $excludeFields);
return $tipSettingsJsonStr;
}
public function getCurrentUserTipSettingsForm(): FormInterface
{
$tipSettings = $this->getCurrentUserTipSettings();
$formFactory = $this->serviceRetriever->getFormFactory();
$tipSettingsForm = $formFactory->create(TipSettingsType::class, $tipSettings);
return $tipSettingsForm;
}
}