<?php
namespace App\Entity;
use App\Entity\Tag;
use App\Entity\Media;
use App\Entity\Category;
use App\Model\Taggable;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\PersistentCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\String\Slugger\AsciiSlugger;
/**
* @ORM\Entity(repositoryClass=App\Repository\ArticleRepository::class)
*/
class Article
{
use Taggable;
/**
* @var int
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
* @var string
*/
private $slug;
/**
* @ORM\Column(type="integer")
* @var integer
*/
private $position;
/**
* @var string
* @ORM\Column(type="string")
*/
private $metaDescription;
/**
* @var Media
* @ORM\ManyToOne(targetEntity="Media", cascade={"persist"})
* @ORM\JoinColumn(name="video_poster_id", referencedColumnName="id")
*/
private $videoPoster;
/**
* @var Category
* @ORM\ManyToOne(targetEntity=Category::class, inversedBy="articles")
* @ORM\JoinColumn(nullable=false)
*/
private $category;
/**
* @var Comment
* @ORM\OneToMany(targetEntity=Comment::class, mappedBy="article", orphanRemoval=true)
*/
private $comments;
/**
* @var string
* @ORM\Column(type="string", length=255)
*/
private $status;
/**
* @var Media
* @ORM\ManyToOne(targetEntity="Media", cascade={"persist"}, fetch="EAGER")
* @ORM\JoinColumn(name="video_id", referencedColumnName="id")
*/
private $video;
/**
* @ORM\OneToMany(targetEntity=VideoMarker::class, mappedBy="article", cascade={"persist"})
*/
private $videoMarkers;
/**
* @var Collection
* @ORM\ManyToMany(targetEntity="Tag",cascade={"persist"})
* @ORM\JoinTable(name="tag_article",
* joinColumns={@ORM\JoinColumn(name="article_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
* )
*/
private $tags;
/**
* @ORM\Column(type="datetime")
*/
private $createdAt;
/**
* @ORM\Column(type="datetime")
*/
private $updatedAt;
public function __construct()
{
$this->comments = new ArrayCollection();
$this->videoMarkers = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getMetaDescription(): ?string
{
return $this->metaDescription;
}
public function setMetaDescription(string $metaDescription): self
{
$this->metaDescription = $metaDescription;
return $this;
}
public function getVideoPoster(): ?Media
{
return $this->videoPoster;
}
public function setVideoPoster(Media $videoPoster): self
{
$this->videoPoster = $videoPoster;
return $this;
}
public function getPosition(): ?int
{
return $this->position;
}
public function setPosition(int $position): self
{
$this->position = $position;
return $this;
}
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->createdAt;
}
public function setCreatedAt(\DateTimeInterface $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
public function getCategory(): ?Category
{
return $this->category;
}
public function setCategory(?Category $category): self
{
$this->category = $category;
return $this;
}
/**
* @return Collection|videoMarkers[]
*/
public function getVideoMarkers(): Collection
{
return $this->videoMarkers;
}
public function addVideoMarker(videoMarker $attachment): self
{
if (!$this->videoMarkers->contains($attachment)) {
$this->videoMarkers[] = $attachment;
$attachment->setArticle($this);
}
return $this;
}
public function removeVideoMarker(videoMarker $attachment): self
{
if ($this->videoMarkers->contains($attachment)) {
$this->videoMarkers->removeElement($attachment);
// set the owning side to null (unless already changed)
if ($attachment->getArticle() === $this) {
$attachment->setArticle(null);
}
}
return $this;
}
public function getStatus(): ?string
{
return $this->status;
}
/**
* setStatus
*
* @param mixed $status
* @return self
*/
public function setStatus(string $status): self
{
$this->status = $status;
return $this;
}
/**
* getVideo
*
* @return Media
*/
public function getVideo(): ?Media
{
return $this->video;
}
/**
* setVideo
*
* @param mixed $video
* @return self
*/
public function setVideo(?Media $video): self
{
$this->video = $video;
return $this;
}
/**
* @return string
*/
public function getTags(): ?ArrayCollection
{
if (empty($this->tags))
return null;
return new \Doctrine\Common\Collections\ArrayCollection($this->tags->toArray());
}
/**
* SetTags
*
* @param Collection $tags
* @return self
*/
public function setTags(Collection $tags): self
{
$this->tags = $tags;
return $this;
}
/**
* addTag
*
* @param Tag $tag
* @return self
*/
public function addTag(Tag $tag): self
{
if ($this->tags == null || !$this->tags->contains($tag)) {
if (gettype($this->tags) == 'ArrayCollection')
$this->tags->add($tag);
else
$this->tags[] = $tag;
}
return $this;
}
/**
* Get the value of updatedAt
*/
public function getUpdatedAt()
{
return $this->updatedAt;
}
/**
* Set the value of updatedAt
*
* @return self
*/
public function setUpdatedAt($updatedAt)
{
$this->updatedAt = $updatedAt;
return $this;
}
/**
* @return string
*/
public function getSlug(): ?string
{
return $this->slug;
}
/**
*
* @param string $slug
*
* @return self
*/
public function setSlug(string $slug): self
{
$slugger = new AsciiSlugger('fr');
$this->slug = $slugger->slug($slug);
return $this;
}
}