<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Annotation\ApiProperty;
use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\HasLifecycleCallbacks;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass="App\Repository\SurveyCompanySurveyFormQuestionRepository")
*/
#[HasLifecycleCallbacks()]
#[ApiResource(
attributes: ['security' => "is_granted('ROLE_USER')"],
normalizationContext: ['groups' => ['scsfq:read']],
denormalizationContext: ['groups' => ['scsfq:write']],
collectionOperations: [
'get',
'post' => [
'security' => "is_granted('ROLE_ADMIN')",
],
],
itemOperations: [
'get',
'put' => ['security' => "is_granted('ROLE_ADMIN') or object.owner == user"],
],
order: ['parentSurveyFormQuestion' => 'ASC', 'rank' => 'ASC']
)]
#[ApiFilter(SearchFilter::class, properties: ['id', 'surveyCompany' => 'exact', 'surveyFormQuestion' => 'exact', 'parentSurveyFormQuestion' => 'exact'])]
#[ApiFilter(PropertyFilter::class)]
#[ApiFilter(OrderFilter::class, properties: ['id', 'surveyCompany.title', 'surveyFormQuestion.label', 'parentSurveyFormQuestion.label', 'rank', 'info', 'level'], arguments: ['orderParameterName' => 'order'])]
class SurveyCompanySurveyFormQuestion
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
* @Groups({"scsfq:read","scsfq:write","surveyComapany:item","pinpointCampaign:list","surveyContribution:read"})
*/
public $id;
/**
* @var SurveyCompany
*
* @ORM\ManyToOne(targetEntity="App\Entity\SurveyCompany", inversedBy="surveyCompanyQuestions")
* @ORM\JoinColumn(name="survey_company_id", referencedColumnName="id", nullable=false)
* @Groups({"scsfq:read","scsfq:write"})
*/
public $surveyCompany;
/**
* @var SurveyFormQuestion
*
* @ORM\ManyToOne(targetEntity="App\Entity\SurveyFormQuestion", inversedBy="surveyCompanies")
* @ORM\JoinColumn(name="survey_form_question_id", referencedColumnName="id", nullable=false)
* @Groups({"scsfq:read","scsfq:write","surveyComapany:item","pinpointCampaign:list"})
*/
public $surveyFormQuestion;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\SurveyFormQuestion", inversedBy="surveyCompanies")
* @ORM\JoinColumn(name="parent_survey_form_question_id", referencedColumnName="id", nullable=false)
* @Groups({"scsfq:read","scsfq:write","surveyComapany:item","pinpointCampaign:list"})
*/
public ?SurveyFormQuestion $parentSurveyFormQuestion;
/**
* @var int
*
* @ORM\Column(name="`rank`",type="integer")
* @Assert\Type(type="integer")
* @Groups({"scsfq:read","scsfq:write","surveyComapany:item", "surveyComapany:write","pinpointCampaign:list"})
*/
#[ApiProperty(iri: 'https://schema.org/rank')]
public $rank = 0;
/**
* @var string
*
* @ORM\Column(type="string", length=2000, nullable=true)
* @Assert\Length(max="2000")
* @Groups({"scsfq:read","scsfq:write","surveyComapany:item", "surveyComapany:write","pinpointCampaign:list"})
*/
private $info;
/**
* @var int
*
* @ORM\Column(type="integer")
* @Assert\Type(type="integer")
* @Groups({"scsfq:read","scsfq:write","surveyComapany:item", "surveyComapany:write","pinpointCampaign:list"})
*/
private $level;
/**
* @ORM\Column(type="boolean")
* @Groups({"scsfq:read","scsfq:write","surveyComapany:item", "surveyComapany:write","pinpointCampaign:list"})
*/
private $isRequired;
/**
* @var int
*
* @ORM\Column(type="integer")
* @Assert\Type(type="integer")
* @Groups({"scsfq:read","scsfq:write","surveyComapany:item", "surveyComapany:write","pinpointCampaign:list"})
*/
private $maxAnswerSelection;
/**
* @var string
*
* @ORM\Column(type="string", length=10, nullable=false, columnDefinition="enum('text', 'number', 'percentage')", options={"default": "text"})
* @Assert\Length(max="15")
* @Groups({"scsfq:read","scsfq:write","surveyComapany:item", "surveyComapany:write","pinpointCampaign:list"})
*/
private $typeRestriction = 'text';
/**
* @ORM\Column(type="boolean")
* @Groups({"scsfq:read","scsfq:write","surveyComapany:item", "surveyComapany:write","pinpointCampaign:list"})
*/
private $isVisible;
public function __construct()
{
$this->rank = 0;
$this->isRequired = false;
$this->isVisible = false;
}
public function __toString(): string
{
return ($this->getSurveyFormQuestion()) ? $this->getSurveyFormQuestion()->getLabel() : '';
}
public function getId(): ?int
{
return $this->id;
}
public function getRank(): ?int
{
return $this->rank;
}
public function setRank(?int $rank): self
{
$this->rank = $rank;
return $this;
}
public function getIsRequired(): ?bool
{
return $this->isRequired;
}
public function setIsRequired(?bool $isRequired): self
{
$this->isRequired = $isRequired;
return $this;
}
public function getIsVisible(): ?bool
{
return $this->isVisible;
}
public function setIsVisible(?bool $isVisible): self
{
$this->isVisible = $isVisible;
return $this;
}
public function getInfo(): ?string
{
return $this->info;
}
public function setInfo(?string $info): self
{
$this->info = $info;
return $this;
}
// ##############################################################
public function getLevel(): ?int
{
return $this->level;
}
public function setLevel(?int $level): self
{
$this->level = $level;
return $this;
}
public function getMaxAnswerSelection(): ?int
{
return $this->maxAnswerSelection;
}
public function setMaxAnswerSelection(?int $maxAnswerSelection): self
{
$this->maxAnswerSelection = $maxAnswerSelection;
return $this;
}
// ####################################################################################
public function getTypeRestriction(): ?string
{
return $this->typeRestriction;
}
public function setTypeRestriction(?string $typeRestriction): self
{
$this->typeRestriction = $typeRestriction;
return $this;
}
// ##############################################################maxAnswerSelection
public function getSurveyFormQuestion(): ?SurveyFormQuestion
{
return $this->surveyFormQuestion;
}
public function setSurveyFormQuestion(?SurveyFormQuestion $surveyFormQuestion): self
{
$this->surveyFormQuestion = $surveyFormQuestion;
return $this;
}
public function getParentSurveyFormQuestion(): ?SurveyFormQuestion
{
return $this->parentSurveyFormQuestion;
}
public function setParentSurveyFormQuestion(?SurveyFormQuestion $parentSurveyFormQuestion): self
{
$this->parentSurveyFormQuestion = $parentSurveyFormQuestion;
return $this;
}
public function getSurveyCompany(): ?SurveyCompany
{
return $this->surveyCompany;
}
public function setSurveyCompany(?SurveyCompany $surveyCompany): self
{
$this->surveyCompany = $surveyCompany;
return $this;
}
#[Groups(['scsfq:read', 'surveyComapany:item'])]
public function getQuestionType(): string
{
return $this->surveyFormQuestion->getType();
}
#[Groups(['scsfq:read', 'surveyComapany:item'])]
public function getTotalAns(): int
{
return $this->surveyFormQuestion->getFormAnswers()->count();
}
}