<?php
namespace App\Entity\Contenu;
use App\Application\Sonata\MediaBundle\Entity\Media;
use App\Entity\Bloc\Bloc;
use App\Entity\EntityBase;
use App\Entity\Seo\Seo;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
/**
* @ORM\Table(name="page_accueil")
* @ORM\Entity(repositoryClass="App\Repository\Contenu\PageAccueilRepository")
* @ORM\HasLifecycleCallbacks()
* @Gedmo\TranslationEntity(class="App\Entity\Translation\Contenu\PageAccueilTranslation")
*/
class PageAccueil extends EntityBase
{
const PAGE_ACCUEIL = 1;
const PAGE_ACCUEIL_GUEST = 2;
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @Gedmo\Locale
* Used locale to override Translation listener`s locale
* this is not a mapped field of entity metadata, just a simple property
*/
protected $locale;
/**
* @Gedmo\Translatable
* @ORM\Column(type="string")
* @Assert\NotBlank()
*/
private $intitule;
/**
* @Gedmo\Translatable
* @ORM\Column(type="string")
* @Assert\NotBlank()
*/
private $titre;
/**
* @Gedmo\Translatable
* @ORM\Column(type="text", nullable=true)
*/
private $accroche;
/**
* @Gedmo\Translatable
* @ORM\Column(type="text", nullable=true)
*/
private $texte;
/**
* @ORM\ManyToOne(targetEntity="App\Application\Sonata\MediaBundle\Entity\Media", cascade={"persist"})
* @ORM\JoinColumn(name="image_id", nullable=true, onDelete="SET NULL")
*/
private $image;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Contenu\LienBlocPageAccueil", mappedBy="pageAccueil", cascade={"persist", "remove"}, orphanRemoval=true)
* @ORM\OrderBy({"position" = "ASC"})
*/
private $lienBlocPageAccueils;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Contenu\LienDiaporamaPageAccueil", mappedBy="pageAccueil", cascade={"persist", "remove"}, orphanRemoval=true)
* @ORM\OrderBy({"position" = "ASC"})
*/
private $lienDiaporamaPageAccueils;
/**
* @ORM\OneToOne(targetEntity="App\Entity\Seo\Seo", cascade={"persist", "remove"})
*/
private $seo;
public function __construct()
{
$this->lienBlocPageAccueils = new ArrayCollection();
$this->lienDiaporamaPageAccueils = new ArrayCollection();
}
public function setTranslatableLocale($locale)
{
$this->locale = $locale;
}
public function getLienDiaporamaPageAccueilVisibles(): array
{
$slides = [];
foreach ($this->lienDiaporamaPageAccueils as $lienDiaporamaPageAccueil) {
if (true === $lienDiaporamaPageAccueil->getVisible()) {
$slides[] = $lienDiaporamaPageAccueil;
}
}
return $slides;
}
/**
* @Assert\Callback
*/
public function validate(ExecutionContextInterface $context, $payload)
{
if (count($this->getLienDiaporamaPageAccueilVisibles()) == 0) {
$context->buildViolation('Vous devez afficher au moins une slide dans le diaporama')
->addViolation();
}
}
public function __toString()
{
return $this->intitule != '' ? $this->intitule : '';
}
public function getId(): ?int
{
return $this->id;
}
public function getIntitule(): ?string
{
return $this->intitule;
}
public function setIntitule(string $intitule): self
{
$this->intitule = $intitule;
return $this;
}
public function getTitre(): ?string
{
return $this->titre;
}
public function setTitre(string $titre): self
{
$this->titre = $titre;
return $this;
}
public function getAccroche(): ?string
{
return $this->accroche;
}
public function setAccroche(?string $accroche): self
{
$this->accroche = $accroche;
return $this;
}
public function getTexte(): ?string
{
return $this->texte;
}
public function setTexte(?string $texte): self
{
$this->texte = $texte;
return $this;
}
public function getImage(): ?Media
{
return $this->image;
}
public function setImage(?Media $image): self
{
$this->image = $image;
return $this;
}
/**
* @return Collection|LienBlocPageAccueil[]
*/
public function getLienBlocPageAccueils(): Collection
{
return $this->lienBlocPageAccueils;
}
public function addLienBlocPageAccueil(LienBlocPageAccueil $lienBlocPageAccueil): self
{
if (!$this->lienBlocPageAccueils->contains($lienBlocPageAccueil)) {
$this->lienBlocPageAccueils[] = $lienBlocPageAccueil;
$lienBlocPageAccueil->setPageAccueil($this);
}
return $this;
}
public function removeLienBlocPageAccueil(LienBlocPageAccueil $lienBlocPageAccueil): self
{
if ($this->lienBlocPageAccueils->contains($lienBlocPageAccueil)) {
$this->lienBlocPageAccueils->removeElement($lienBlocPageAccueil);
// set the owning side to null (unless already changed)
if ($lienBlocPageAccueil->getPageAccueil() === $this) {
$lienBlocPageAccueil->setPageAccueil(null);
}
}
return $this;
}
/**
* @return Collection|LienDiaporamaPageAccueil[]
*/
public function getLienDiaporamaPageAccueils(): Collection
{
return $this->lienDiaporamaPageAccueils;
}
public function addLienDiaporamaPageAccueil(LienDiaporamaPageAccueil $lienDiaporamaPageAccueil): self
{
if (!$this->lienDiaporamaPageAccueils->contains($lienDiaporamaPageAccueil)) {
$this->lienDiaporamaPageAccueils[] = $lienDiaporamaPageAccueil;
$lienDiaporamaPageAccueil->setPageAccueil($this);
}
return $this;
}
public function removeLienDiaporamaPageAccueil(LienDiaporamaPageAccueil $lienDiaporamaPageAccueil): self
{
if ($this->lienDiaporamaPageAccueils->contains($lienDiaporamaPageAccueil)) {
$this->lienDiaporamaPageAccueils->removeElement($lienDiaporamaPageAccueil);
// set the owning side to null (unless already changed)
if ($lienDiaporamaPageAccueil->getPageAccueil() === $this) {
$lienDiaporamaPageAccueil->setPageAccueil(null);
}
}
return $this;
}
public function getSeo(): ?Seo
{
return $this->seo;
}
public function setSeo(?Seo $seo): self
{
$this->seo = $seo;
return $this;
}
}