<?php
namespace App\Entity;
use App\Validator as AppAssert;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass="App\Repository\SurveyContributionQuestionRepository")
* @AppAssert\DynamicValidationGroups(expression="this.getFormQuestion().getType()", value="App\Enum\SurveyFormQuestionType::TEXT", validationGroups={"TypeText"})
* @AppAssert\DynamicValidationGroups(expression="this.getFormQuestion().getType()", value="App\Enum\SurveyFormQuestionType::TEXTAREA", validationGroups={"TypeTextarea"})
* @AppAssert\DynamicValidationGroups(expression="this.getFormQuestion().getType()", value="App\Enum\SurveyFormQuestionType::SLIDER", validationGroups={"TypeSlider"})
* @AppAssert\DynamicValidationGroups(expression="this.getFormQuestion().getType()", value="App\Enum\SurveyFormQuestionType::CHOICE_UNIQUE_COLLAPSED", validationGroups={"TypeChoiceUnique"})
* @AppAssert\DynamicValidationGroups(expression="this.getFormQuestion().getType()", value="App\Enum\SurveyFormQuestionType::CHOICE_UNIQUE_EXPANDED", validationGroups={"TypeChoiceUnique"})
* @AppAssert\DynamicValidationGroups(expression="this.getFormQuestion().getType()", value="App\Enum\SurveyFormQuestionType::CHOICE_MULTIPLE_COLLAPSED", validationGroups={"TypeChoiceMultiple"})
* @AppAssert\DynamicValidationGroups(expression="this.getFormQuestion().getType()", value="App\Enum\SurveyFormQuestionType::CHOICE_MULTIPLE_EXPANDED", validationGroups={"TypeChoiceMultiple"})
* @AppAssert\DynamicValidationGroups(expression="this.hasOtherFormAnswerSelected()", value=true, validationGroups={"TypeWithOther"})
*/
class SurveyContributionQuestion
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var SurveyContributionStep
*
* @ORM\ManyToOne(targetEntity="App\Entity\SurveyContributionStep", inversedBy="contributionQuestions")
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
* @Assert\NotNull()
*/
private $contributionStep;
/**
* @var SurveyFormQuestion
*
* @ORM\ManyToOne(targetEntity="App\Entity\SurveyFormQuestion")
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
* @Assert\NotNull()
* @Groups({"surveyContribution:read"})
*/
private $formQuestion;
/**
* @var SurveyCompanySurveyFormQuestion
*
* @ORM\ManyToOne(targetEntity="App\Entity\SurveyCompanySurveyFormQuestion")
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
* @Assert\NotNull()
* @Groups({"surveyContribution:read"})
*/
private $surveyCompanySurveyFormQuestion;
/**
* @var string
*
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"surveyContribution:read"})
*/
private $value;
/**
* @var SurveyFormAnswer
*
* @ORM\ManyToOne(targetEntity="App\Entity\SurveyFormAnswer")
* @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
* @Groups({"surveyContribution:read"})
*/
private $formAnswer;
/**
* @var FileTypeAnswer
*
* @ORM\ManyToOne(targetEntity="App\Entity\FileTypeAnswer")
* @ORM\JoinColumn(nullable=true, onDelete="CASCADE")
*/
private $fileTypeAnswer;
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="App\Entity\SurveyFormAnswer")
* @Groups({"surveyContribution:read"})
*/
private $formAnswers;
/**
* @ORM\OneToMany(targetEntity="App\Entity\SurveyContributionRankingAnswer", mappedBy="contributionQuestion", cascade={"persist"})
* @ORM\OrderBy({"position": "ASC"})
* @Groups({"surveyContribution:read"})
*/
private $contributionRankingAnswers;
/**
* @ORM\OneToOne(targetEntity="App\Entity\SurveyContributionFileUploadAnswer", mappedBy="contributionQuestion", cascade={"persist"})
* @ORM\JoinColumn(name="file_type_answer_id", referencedColumnName="id", onDelete="SET NULL")
* @Groups({"surveyContribution:read"})
*/
private $contributionFileUploadAnswers;
/**
* @ORM\OneToOne(targetEntity="App\Entity\SurveyContributionDateTimeAnswer", mappedBy="contributionQuestion", cascade={"persist"})
* @ORM\JoinColumn(name="date_time_answers_id", referencedColumnName="id", onDelete="SET NULL")
* @Groups({"surveyContribution:read"})
*/
private $contributionDateTimeAnswers;
/**
* @ORM\OneToMany(targetEntity="App\Entity\SurveyContributionMultiLineOpenEndedAnswer", mappedBy="contributionQuestion", cascade={"persist"})
* @Groups({"surveyContribution:read"})
*/
private $contributionMultiLineOpenEndedAnswers;
/**
* @var float
*
* @ORM\Column(type="float", nullable=true)
* @Groups({"surveyContribution:read"})
*/
private $rating;
/**
* @var string
*
* @ORM\Column(type="string", length=255, nullable=true)
* @Assert\NotBlank(groups={"TypeWithOther"})
* @Groups({"surveyContribution:read"})
*/
private $other;
/**
* @ORM\Column(type="boolean", nullable=true)
* @Assert\Type("bool")
*/
private $isDraft;
/**
* @var string
*
* @ORM\Column(type="string", length=45, nullable=true)
*/
private $sentimentResult;
/**
* @var float
*
* @ORM\Column(type="float", nullable=true)
*/
private $sentimentScorePositive;
/**
* @var float
*
* @ORM\Column(type="float", nullable=true)
*/
private $sentimentScoreNegative;
/**
* @var float
*
* @ORM\Column(type="float", nullable=true)
*/
private $sentimentScoreNeutral;
/**
* @var float
*
* @ORM\Column(type="float", nullable=true)
*/
private $sentimentScoreMixed;
/**
* @ORM\OneToMany(targetEntity=SurveyContributionMatrixAnswer::class, mappedBy="contributionQuestion",cascade={"persist"} )
* @Groups({"surveyContribution:read"})
*/
private $surveyContributionMatrixAnswers;
public function __construct()
{
$this->formAnswers = new ArrayCollection();
$this->contributionRankingAnswers = new ArrayCollection();
$this->contributionMultiLineOpenEndedAnswers = new ArrayCollection();
$this->surveyContributionMatrixAnswers = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getValue(): ?string
{
return $this->value;
}
public function setValue(?string $value): self
{
$this->value = $value;
return $this;
}
public function getContributionStep(): ?SurveyContributionStep
{
return $this->contributionStep;
}
public function setContributionStep(?SurveyContributionStep $contributionStep): self
{
$this->contributionStep = $contributionStep;
return $this;
}
public function getFormQuestion(): ?SurveyFormQuestion
{
return $this->formQuestion;
}
public function setFormQuestion(?SurveyFormQuestion $formQuestion): self
{
$this->formQuestion = $formQuestion;
return $this;
}
public function getSurveyCompanySurveyFormQuestion(): ?SurveyCompanySurveyFormQuestion
{
return $this->surveyCompanySurveyFormQuestion;
}
public function setSurveyCompanySurveyFormQuestion(?SurveyCompanySurveyFormQuestion $surveyCompanySurveyFormQuestion): self
{
$this->surveyCompanySurveyFormQuestion = $surveyCompanySurveyFormQuestion;
return $this;
}
public function getFormAnswer(): ?SurveyFormAnswer
{
return $this->formAnswer;
}
public function setFormAnswer(?SurveyFormAnswer $formAnswer): self
{
$this->formAnswer = $formAnswer;
return $this;
}
public function getRating()
{
return $this->rating;
}
public function setRating($rating): self
{
$this->rating = $rating;
return $this;
}
/**
* @return Collection|SurveyFormAnswer[]
*/
public function getFormAnswers(): Collection
{
return $this->formAnswers;
}
public function addFormAnswer(SurveyFormAnswer $formAnswer): self
{
if (!$this->formAnswers->contains($formAnswer)) {
$this->formAnswers[] = $formAnswer;
}
return $this;
}
public function removeFormAnswer(SurveyFormAnswer $formAnswer): self
{
if ($this->formAnswers->contains($formAnswer)) {
$this->formAnswers->removeElement($formAnswer);
}
return $this;
}
public function getOther(): ?string
{
return $this->other;
}
public function setOther(?string $other): self
{
$this->other = $other;
return $this;
}
public function getIsDraft(): ?bool
{
return $this->isDraft;
}
public function setIsDraft(?bool $isDraft): self
{
$this->isDraft = $isDraft;
return $this;
}
public function hasOtherFormAnswerSelected(): bool
{
// choice unique
if (null !== $this->formAnswer && true === $this->formAnswer->getOther()) {
return true;
}
// choice multiple
foreach ($this->formAnswers as $formAnswer) {
/** @var SurveyFormAnswer $formAnswer */
if (true === $formAnswer->getOther()) {
return true;
}
}
return false;
}
/**
* @return Collection|SurveyContributionRankingAnswer[]
*/
public function getContributionRankingAnswers(): Collection
{
return $this->contributionRankingAnswers;
}
public function addContributionRankingAnswer(SurveyContributionRankingAnswer $contributionRankingAnswer): self
{
if (!$this->contributionRankingAnswers->contains($contributionRankingAnswer)) {
$this->contributionRankingAnswers[] = $contributionRankingAnswer;
$contributionRankingAnswer->setContributionQuestion($this);
}
return $this;
}
public function removeContributionRankingAnswer(SurveyContributionRankingAnswer $contributionRankingAnswer): self
{
if ($this->contributionRankingAnswers->contains($contributionRankingAnswer)) {
$this->contributionRankingAnswers->removeElement($contributionRankingAnswer);
// set the owning side to null (unless already changed)
if ($contributionRankingAnswer->getContributionQuestion() === $this) {
$contributionRankingAnswer->setContributionQuestion(null);
}
}
return $this;
}
// #################################################################################################################
/**
* @return Collection|SurveyContributionMultiLineOpenEndedAnswer[]
*/
public function getContributionMultiLineOpenEndedAnswers(): Collection
{
return $this->contributionMultiLineOpenEndedAnswers;
}
public function addContributionMultiLineOpenEndedAnswer(SurveyContributionMultiLineOpenEndedAnswer $contributionMultiLineOpenEndedAnswer): self
{
if (!$this->contributionMultiLineOpenEndedAnswers->contains($contributionMultiLineOpenEndedAnswer)) {
$this->contributionMultiLineOpenEndedAnswers[] = $contributionMultiLineOpenEndedAnswer;
$contributionMultiLineOpenEndedAnswer->setContributionQuestion($this);
}
return $this;
}
public function removeContributionMultiLineOpenEndedAnswers(SurveyContributionMultiLineOpenEndedAnswer $contributionMultiLineOpenEndedAnswer): self
{
if ($this->contributionMultiLineOpenEndedAnswers->contains($contributionMultiLineOpenEndedAnswer)) {
$this->contributionMultiLineOpenEndedAnswers->removeElement($contributionMultiLineOpenEndedAnswer);
// set the owning side to null (unless already changed)
if ($contributionMultiLineOpenEndedAnswer->getContributionQuestion() === $this) {
$contributionMultiLineOpenEndedAnswer->setContributionQuestion(null);
}
}
return $this;
}
// ##################################################################################################################
public function isAnswered(): bool
{
return null !== $this->getValue() || null !== $this->getFormAnswer() || 0 < $this->getFormAnswers()->count() || null !== $this->getRating() || null !== $this->getOther();
}
public function getSentimentResult(): ?string
{
return $this->sentimentResult;
}
public function setSentimentResult(?string $sentimentResult): self
{
$this->sentimentResult = $sentimentResult;
return $this;
}
public function getSentimentScorePositive(): ?float
{
return $this->sentimentScorePositive;
}
public function setSentimentScorePositive(?float $sentimentScorePositive): self
{
$this->sentimentScorePositive = $sentimentScorePositive;
return $this;
}
public function getSentimentScoreNegative(): ?float
{
return $this->sentimentScoreNegative;
}
public function setSentimentScoreNegative(?float $sentimentScoreNegative): self
{
$this->sentimentScoreNegative = $sentimentScoreNegative;
return $this;
}
public function getSentimentScoreNeutral(): ?float
{
return $this->sentimentScoreNeutral;
}
public function setSentimentScoreNeutral(?float $sentimentScoreNeutral): self
{
$this->sentimentScoreNeutral = $sentimentScoreNeutral;
return $this;
}
public function getSentimentScoreMixed(): ?float
{
return $this->sentimentScoreMixed;
}
public function setSentimentScoreMixed(?float $sentimentScoreMixed): self
{
$this->sentimentScoreMixed = $sentimentScoreMixed;
return $this;
}
public function getContributionFileUploadAnswers(): ?SurveyContributionFileUploadAnswer
{
return $this->contributionFileUploadAnswers;
}
public function setContributionFileUploadAnswers(SurveyContributionFileUploadAnswer $contributionFileUploadAnswers): self
{
if ($contributionFileUploadAnswers) {
$this->contributionFileUploadAnswers = $contributionFileUploadAnswers;
return $this;
}
}
public function getContributionDateTimeAnswers(): ?SurveyContributionDateTimeAnswer
{
return $this->contributionDateTimeAnswers;
}
public function setContributionDateTimeAnswers(?SurveyContributionDateTimeAnswer $contributionDateTimeAnswers): self
{
if ($contributionDateTimeAnswers) {
$this->contributionDateTimeAnswers = $contributionDateTimeAnswers;
return $this;
}
}
public function getFileTypeAnswer(): ?FileTypeAnswer
{
return $this->fileTypeAnswer;
}
public function setFileTypeAnswer(FileTypeAnswer $fileTypeAnswer): self
{
if ($fileTypeAnswer) {
$this->fileTypeAnswer = $fileTypeAnswer;
return $this;
}
}
/**
* @return Collection|SurveyContributionMatrixAnswer[]
*/
public function getSurveyContributionMatrixAnswers(): Collection
{
return $this->surveyContributionMatrixAnswers;
}
public function addSurveyContributionMatrixAnswer(SurveyContributionMatrixAnswer $surveyContributionMatrixAnswer): self
{
if (!$this->surveyContributionMatrixAnswers->contains($surveyContributionMatrixAnswer)) {
$this->surveyContributionMatrixAnswers[] = $surveyContributionMatrixAnswer;
$surveyContributionMatrixAnswer->setContributionQuestion($this);
}
return $this;
}
public function removeSurveyContributionMatrixAnswer(SurveyContributionMatrixAnswer $surveyContributionMatrixAnswer): self
{
if ($this->surveyContributionMatrixAnswers->removeElement($surveyContributionMatrixAnswer)) {
// set the owning side to null (unless already changed)
if ($surveyContributionMatrixAnswer->getContributionQuestion() === $this) {
$surveyContributionMatrixAnswer->setContributionQuestion(null);
}
}
return $this;
}
}