<?php
namespace App\Entity;
use App\Repository\ThemeRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\String\Slugger\AsciiSlugger;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* @ORM\Entity(repositoryClass=ThemeRepository::class)
* @UniqueEntity("name")
*/
class Theme
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @Gedmo\Slug(fields={"name"})
* @ORM\Column(type="string", length=255, unique=true)
*/
protected $slug;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $priority;
/**
* @var \DateTime $createdAt
*
* @Gedmo\Timestampable(on="create")
* @ORM\Column(type="datetime", nullable=true)
*/
private $createdAt;
/**
* @var \DateTime $updatedAt
*
* @Gedmo\Timestampable(on="update")
* @ORM\Column(type="datetime")
*/
private $updatedAt;
/* relations */
/**
* @ORM\OneToOne(targetEntity="App\Entity\Media", mappedBy="theme", cascade={"persist", "remove"}))
* @ORM\JoinColumn(name="theme_picto", referencedColumnName="id", onDelete="CASCADE")
*/
private $picto;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Tag", inversedBy="themes", cascade={"persist", "remove"})
* @ORM\OrderBy({"name" = "ASC"})
* @ORM\JoinTable(name="theme_tag",
* joinColumns={@ORM\JoinColumn(name="theme_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
* )
*/
private $tags;
public function __construct()
{
// $slugger = new AsciiSlugger();
// $this->slug = $slugger->slug($this->name);
$this->createdAt = new \DateTime('now'); // default
$this->updatedAt = new \DateTime('now'); // default
$this->tags = new ArrayCollection();
}
public function __toString()
{
return $this->name;
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = trim(strtolower($name));
return $this;
}
public function getSlug(): ?string
{
return $this->slug;
}
public function setSlug(string $slug): self
{
$this->slug = $slug;
return $this;
}
public function getPriority(): ?int
{
return $this->priority;
}
public function setPriority(int $priority): self
{
$this->priority = $priority;
return $this;
}
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->createdAt;
}
public function setCreatedAt(?\DateTimeInterface $createdAt): self
{
$this->created = $createdAt;
return $this;
}
public function getUpdatedAt(): ?\DateTimeInterface
{
return $this->updatedAt;
}
public function setUpdatedAt(\DateTimeInterface $updatedAt): self
{
$this->updatedAt = $updatedAt;
return $this;
}
public function getPicto(): ?Media
{
return $this->picto;
}
public function setPicto(?Media $picto): self
{
$this->picto = $picto;
// if($picto) $picto->setTheme($this);
return $this;
}
/**
* @return Collection|Tag[]
*/
public function getTags(): ?Collection
{
return $this->tags;
}
public function addTag(Tag $tag): self
{
if (!$this->tags->contains($tag)) {
$this->tags[] = $tag;
}
return $this;
}
public function removeTag(Tag $tag): self
{
if ($this->tags->contains($tag)) {
$this->tags->removeElement($tag);
}
return $this;
}
}