<?php
namespace EADPlataforma\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use EADPlataforma\Validator\Constraints as EADAssert;
use EADPlataforma\Enum\FaqEnum;
use EADPlataforma\Util\StringUtil;
use \DateTime;
/**
* Faq
*
* @ORM\Table(name="faq", indexes={
* @ORM\Index(name="fk_faq_product_id", columns={"product_id"}),
* @ORM\Index(name="fk_faq_user_delete_id", columns={"user_delete_id"})
* })
*
* @ORM\Entity(repositoryClass="EADPlataforma\Repository\FaqRepository")
*/
class Faq
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @Assert\NotBlank(
* message = "Deleted not informed"
* )
*
* @Assert\Choice(
* choices = {
* FaqEnum::ITEM_NO_DELETED,
* FaqEnum::ITEM_ON_TRASH,
* FaqEnum::ITEM_DELETED
* },
* message = "Delete Option Invalid"
* )
*
* @var int
*
* @ORM\Column(name="deleted", type="integer", nullable=false, options={"default"="0"})
*/
private $deleted = FaqEnum::ITEM_NO_DELETED;
/**
* @Assert\NotBlank(
* message = "Order not informed"
* )
*
* @var int
*
* @ORM\Column(name="`order`", type="integer", nullable=false)
*/
private $order;
/**
* @Assert\NotBlank(
* message = "Type not informed"
* )
*
* @Assert\Choice(
* choices = {
* FaqEnum::GENERAL,
* FaqEnum::COURSE,
* FaqEnum::SUBSCRIPTION,
* FaqEnum::ALL_COURSE,
* FaqEnum::ALL_SUBSCRIPTION,
* FaqEnum::COMBO,
* FaqEnum::ALL_COMBO
* },
* message = "Type Invalid"
* )
*
* @var int
*
* @ORM\Column(name="type", type="integer", nullable=false)
*/
private $type;
/**
* @Assert\NotBlank(
* message = "Question not informed"
* )
*
* @var string
*
* @ORM\Column(name="question", type="text", length=0, nullable=false)
*/
private $question;
/**
* @Assert\NotBlank(
* message = "Answer not informed"
* )
*
* @var string
*
* @ORM\Column(name="answer", type="text", length=0, nullable=false)
*/
private $answer;
/**
* @Assert\NotBlank(
* groups = "isProduct",
* message = "Product not informed"
* )
*
* @Assert\Valid
*
* @var \Product
*
* @ORM\ManyToOne(targetEntity="Product")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="product_id", referencedColumnName="id")
* })
*/
private $product;
/**
* @Assert\Valid
*
* @var \EADPlataforma\Entity\User
*
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user_delete_id", referencedColumnName="id", nullable=true)
* })
*/
private $userDelete;
/**
* @Assert\Choice(
* choices = {
* FaqEnum::INDIVIDUAL,
* FaqEnum::CASCADE
* },
* message = "Type Delete Invalid"
* )
*
* @var int
*
* @ORM\Column(name="type_delete", type="integer", nullable=true)
*/
private $typeDelete;
/**
* @EADAssert\DateTimeEAD(
* message = "Date Delete Invalid"
* )
*
* @var \DateTime|null
*
* @ORM\Column(name="date_delete", type="datetime", nullable=true)
*/
private $dateDelete;
public function getId(): ?int
{
return $this->id;
}
public function getOrder(): ?int
{
return $this->order;
}
public function setOrder(int $order): self
{
$this->order = $order;
return $this;
}
public function getType(): ?int
{
return $this->type;
}
public function setType(int $type): self
{
$this->type = $type;
return $this;
}
public function getQuestion(): ?string
{
return StringUtil::fromUnicode(StringUtil::encodeStringStatic($this->question));
}
public function setQuestion(string $question): self
{
$this->question = StringUtil::toUnicode($question);
return $this;
}
public function getAnswer(): ?string
{
return StringUtil::fromUnicode(StringUtil::encodeStringStatic($this->answer));
}
public function setAnswer(string $answer): self
{
$this->answer = StringUtil::toUnicode($answer);
return $this;
}
public function getProduct(): ?Product
{
return $this->product;
}
public function setProduct(?Product $product): self
{
$this->product = $product;
return $this;
}
public function getUserDelete(): ?User
{
return $this->userDelete;
}
public function setUserDelete(?User $userDelete): self
{
$this->userDelete = $userDelete;
return $this;
}
public function getDateDelete($dateFormat = 'Y-m-d H:i:s')
{
if($this->dateDelete){
return $this->dateDelete->format($dateFormat);
}
return $this->dateDelete;
}
public function setDateDelete($dateDelete): self
{
if(!empty($dateDelete)){
$dateDelete = DateTime::createFromFormat('Y-m-d H:i:s', $dateDelete);
}
$this->dateDelete = $dateDelete;
return $this;
}
public function individual(): self
{
$this->typeDelete = FaqEnum::INDIVIDUAL;
return $this;
}
public function cascade(): self
{
$this->typeDelete = FaqEnum::CASCADE;
return $this;
}
public function isOnTrash(): bool
{
return ($this->deleted == FaqEnum::ITEM_ON_TRASH);
}
public function isDeleted(): bool
{
return ($this->deleted == FaqEnum::ITEM_DELETED);
}
public function restore(): self
{
$this->deleted = FaqEnum::ITEM_NO_DELETED;
return $this;
}
public function trash(): self
{
$this->deleted = FaqEnum::ITEM_ON_TRASH;
return $this;
}
public function delete(): self
{
$this->deleted = FaqEnum::ITEM_DELETED;
return $this;
}
public function toReturn(){
$data = [
"id" => $this->id,
"deleted" => $this->deleted,
"order" => $this->order,
"type" => $this->type,
"question" => $this->getQuestion(),
"answer" => $this->getAnswer(),
"product" => ( $this->product ? $this->product->getId() : null ),
"userDelete" => ( $this->userDelete ? $this->userDelete->getId() : null ),
"typeDelete" => $this->typeDelete,
"dateDelete" => $this->getDateDelete()
];
return $data;
}
}