<?php
namespace App\Entity;
use App\Repository\SliderRepository;
use App\Traits\DateTrait;
use DateTimeInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as Serializer;
use JMS\Serializer\Annotation\Expose;
use JMS\Serializer\Annotation\Groups;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass=SliderRepository::class)
*
* @UniqueEntity(
* fields={"slug", "subdomain"},
* errorPath="slug",
* message="Le slug doit ĂȘtre unique sur le domaine actuel"
* )
*
* @Serializer\ExclusionPolicy("ALL")
*/
class Slider
{
public const SLIDER_TYPE_IMAGE = 'slider_image';
public const SLIDER_TYPE_PRODUCT = 'slider_product';
public const SLIDER_TYPE_INVESTIGATION = 'slider_investigation';
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*
* @Expose
* @Groups({"slider:id", "slider"})
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*
* @Expose
* @Groups({"slider:title", "slider"})
*/
private $title;
/**
* @ORM\OneToMany(targetEntity=SliderItem::class, mappedBy="slider", cascade={"persist","remove"})
* @ORM\OrderBy({"orderItem" = "ASC"})
*/
private $items;
/**
* @ORM\Column(type="datetime", nullable=true)
*
* @Expose
* @Groups({"slider:dateStart", "slider"})
*/
private $dateStart;
/**
* @ORM\Column(type="datetime", nullable=true)
*
* @Expose
* @Groups({"slider:dateEnd", "slider"})
*/
private $dateEnd;
/**
* @ORM\Column(type="string", length=64)
* @Assert\NotBlank()
* @Expose
* @Groups({"slider:slug", "slider"})
*/
private $slug;
/**
* @ORM\Column(type="string", length=255)
*
* @Expose
* @Groups({"slider:subDomain", "slider"})
*/
private $subdomain;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*
* @Expose
* @Groups({"slider:type", "slider"})
*/
private $type;
/**
* @ORM\ManyToOne(targetEntity=Catalogue::class, inversedBy="sliders")
* @ORM\JoinColumn(nullable=true, onDelete="SET NULL")
*/
private $catalog;
use DateTrait;
public function __construct()
{
$this->items = new ArrayCollection();
}
public function __toString()
{
return $this->title;
}
/*
* ============================================================================================
* =============================== FONCTIONS CUSTOM ===========================================
* ============================================================================================
*/
public function getItemsNumber()
{
return count( $this->getItems() );
}
/*
* ============================================================================================
* ============================== FIN FONCTIONS CUSTOM ========================================
* ============================================================================================
*/
/**
* @return Collection|SliderItem[]
*/
public function getItems(): Collection
{
return $this->items;
}
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle( string $title ): self
{
$this->title = $title;
return $this;
}
public function addSliderItem( SliderItem $sliderItem ): self
{
if ( !$this->items->contains( $sliderItem ) ) {
$this->items[] = $sliderItem;
$sliderItem->setSlider( $this );
}
return $this;
}
public function removeSliderItem( SliderItem $sliderItem ): self
{
if ( $this->items->removeElement( $sliderItem ) ) {
// set the owning side to null (unless already changed)
if ( $sliderItem->getSlider() === $this ) {
$sliderItem->setSlider( NULL );
}
}
return $this;
}
public function addItem( SliderItem $item ): self
{
if ( !$this->items->contains( $item ) ) {
$this->items[] = $item;
$item->setSlider( $this );
}
return $this;
}
public function removeItem( SliderItem $item ): self
{
if ( $this->items->removeElement( $item ) ) {
// set the owning side to null (unless already changed)
if ( $item->getSlider() === $this ) {
$item->setSlider( NULL );
}
}
return $this;
}
public function getDateStart(): ?DateTimeInterface
{
return $this->dateStart;
}
public function setDateStart( ?DateTimeInterface $dateStart ): self
{
$this->dateStart = $dateStart;
return $this;
}
public function getDateEnd(): ?DateTimeInterface
{
return $this->dateEnd;
}
public function setDateEnd( ?DateTimeInterface $dateEnd ): self
{
$this->dateEnd = $dateEnd;
return $this;
}
public function getSlug(): ?string
{
return $this->slug;
}
public function setSlug( string $slug ): self
{
$this->slug = $slug;
return $this;
}
public function getSubdomain(): ?string
{
return $this->subdomain;
}
public function setSubdomain(string $subdomain): self
{
$this->subdomain = $subdomain;
return $this;
}
public function getType(): ?string
{
return $this->type;
}
public function setType(?string $type): self
{
$this->type = $type;
return $this;
}
public function getCatalog(): ?Catalogue
{
return $this->catalog;
}
public function setCatalog(?Catalogue $catalog): self
{
$this->catalog = $catalog;
return $this;
}
}