<?php
namespace App\Entity;
use App\Repository\TemplateRepository;
use App\Translation\AutoTranslatableTrait;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface;
#[ORM\Entity(repositoryClass: TemplateRepository::class)]
class Template implements TranslatableInterface
{
use AutoTranslatableTrait;
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private $id;
#[ORM\Column(type: 'string', length: 50)]
private $type;
#[ORM\Column(type: 'string', length: 100)]
private $name;
#[ORM\Column(type: 'text', nullable: true)]
private $description;
#[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'templates')]
#[ORM\JoinColumn(nullable: false)]
private $created_by_user;
#[ORM\Column(type: 'boolean')]
private $created_by_fryd;
#[ORM\Column(type: 'json')]
private $data = [];
#[ORM\Column(type: 'json', nullable: true)]
private $metadata = [];
#[ORM\Column(type: 'datetime')]
private $created_at;
#[ORM\Column(type: 'datetime', nullable: true)]
private $updated_at;
#[ORM\OneToMany(targetEntity: FavoriteTemplate::class, mappedBy: 'template', orphanRemoval: true)]
private $favoriteTemplates;
#[ORM\OneToMany(targetEntity: TemplateUsage::class, mappedBy: 'template', orphanRemoval: true)]
private $templateUsages;
#[ORM\OneToMany(targetEntity: TemplateTranslation::class, mappedBy: 'translatable', orphanRemoval: true)]
private $templateTranslation;
#[ORM\Column(type: 'boolean', nullable: true)]
private $recommended_by_fryd;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private $dynamic_link;
public function __construct()
{
$this->favoriteTemplates = new ArrayCollection();
$this->created_at = new \DateTime();
$this->templateUsages = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getType(): ?string
{
return $this->type;
}
public function setType(string $type): self
{
$this->type = $type;
return $this;
}
public function getName($skipTranslation = false): ?string
{
if($skipTranslation || $this->shouldNotBeTranslated()) {
return $this->name;
}
$translated = $this->translate()->getName();
return !empty($translated) ? $translated : $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getDescription($skipTranslation=false): ?string
{
if($skipTranslation || $this->shouldNotBeTranslated()) {
return $this->description;
}
$translated = $this->translate()->getDescription();
return !empty($translated) ? $translated : $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
public function getCreatedByUser(): ?User
{
return $this->created_by_user;
}
public function setCreatedByUser(?User $created_by_user): self
{
$this->created_by_user = $created_by_user;
return $this;
}
public function getCreatedByFryd(): ?bool
{
return $this->created_by_fryd;
}
public function setCreatedByFryd(bool $created_by_fryd): self
{
$this->created_by_fryd = $created_by_fryd;
return $this;
}
public function getData(): ?array
{
return $this->data;
}
public function setData(array $data): self
{
$this->data = $data;
return $this;
}
public function getMetadata(): ?array
{
return $this->metadata;
}
public function setMetadata(?array $metadata): self
{
$this->metadata = $metadata;
return $this;
}
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->created_at;
}
public function setCreatedAt(\DateTimeInterface $created_at): self
{
$this->created_at = $created_at;
return $this;
}
public function getUpdatedAt(): ?\DateTimeInterface
{
return $this->updated_at;
}
public function setUpdatedAt(?\DateTimeInterface $updated_at): self
{
$this->updated_at = $updated_at;
return $this;
}
/**
* @return Collection<int, FavoriteTemplate>
*/
public function getFavoriteTemplates(): Collection
{
return $this->favoriteTemplates;
}
public function addFavoriteTemplate(FavoriteTemplate $favoriteTemplate): self
{
if (!$this->favoriteTemplates->contains($favoriteTemplate)) {
$this->favoriteTemplates[] = $favoriteTemplate;
$favoriteTemplate->setTemplate($this);
}
return $this;
}
public function removeFavoriteTemplate(FavoriteTemplate $favoriteTemplate): self
{
if ($this->favoriteTemplates->removeElement($favoriteTemplate)) {
// set the owning side to null (unless already changed)
if ($favoriteTemplate->getTemplate() === $this) {
$favoriteTemplate->setTemplate(null);
}
}
return $this;
}
/**
* @return Collection<int, TemplateUsage>
*/
public function getTemplateUsages(): Collection
{
return $this->templateUsages;
}
public function addTemplateUsage(TemplateUsage $templateUsage): self
{
if (!$this->templateUsages->contains($templateUsage)) {
$this->templateUsages[] = $templateUsage;
$templateUsage->setTemplate($this);
}
return $this;
}
public function removeTemplateUsage(TemplateUsage $templateUsage): self
{
if ($this->templateUsages->removeElement($templateUsage)) {
// set the owning side to null (unless already changed)
if ($templateUsage->getTemplate() === $this) {
$templateUsage->setTemplate(null);
}
}
return $this;
}
public function getRecommendedByFryd(): ?bool
{
return $this->recommended_by_fryd;
}
public function setRecommendedByFryd(?bool $recommended_by_fryd): self
{
$this->recommended_by_fryd = $recommended_by_fryd;
return $this;
}
public function getDynamicLink(): ?string
{
return $this->dynamic_link;
}
public function setDynamicLink(?string $dynamic_link): self
{
$this->dynamic_link = $dynamic_link;
return $this;
}
}