<?php
namespace App\Entity\Ajustes;
use App\Repository\Ajustes\PaginaRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\Criteria;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\String\Slugger\AsciiSlugger;
/**
* @ORM\Entity(repositoryClass=PaginaRepository::class)
* @UniqueEntity(fields="PagSlug", message="Ya existe otra página con ese Slug.")
*/
class Pagina
{
public const BASEDIR = '/pages/privado/ajustes/paginas';
public const ICON_CLASS = 'fas fa-scroll';
public const ICON = '<i class="'.self::ICON_CLASS.'"></i>';
public const LUGAR_MENU = 1;
public const LUGAR_FOOTER = 2;
public const LUGAR_NONE = 3;
public const LUGAR_INICIO = 4;
public const LUGAR = [
'pagina.lugares.menu' => self::LUGAR_MENU,
'pagina.lugares.footer' => self::LUGAR_FOOTER,
'pagina.lugares.ninguno' => self::LUGAR_NONE,
'pagina.lugares.inicio' => self::LUGAR_INICIO,
];
public const STATUS = [
'pagina.estados.activo' => self::STATUS_ACTIVE,
'pagina.estados.inactivo' => self::STATUS_INACTIVE,
];
public const STATUS_ACTIVE = true;
public const STATUS_INACTIVE = false;
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=180, unique=true)
*/
private $PagSlug;
/**
* @ORM\Column(type="string", length=255)
*/
private $PagNombre;
/**
* @ORM\Column(type="string", length=255)
*/
private $PagTitulo;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $PagPalabrasClave;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $PagMetaDescripcion;
/**
* @ORM\Column(type="string", length=255)
*/
private $PagIdioma;
/**
* @ORM\Column(type="boolean")
*/
private $PagEstado;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $PagPosicion;
/**
* @ORM\Column(type="smallint", nullable=true)
*/
private $PagLugar;
/**
* @ORM\ManyToOne(targetEntity=Pagina::class, inversedBy="PagHijos")
*/
private $PagPadre;
/**
* @ORM\OneToMany(targetEntity=Pagina::class, mappedBy="PagPadre")
*/
private $PagHijos;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $PagContenidoHtml;
public function __construct()
{
$this->PagHijos = new ArrayCollection();
}
public function __toString()
{
return (string) $this->PagNombre;
}
public function getId(): ?int
{
return $this->id;
}
public function getPagSlug(): ?string
{
return $this->PagSlug;
}
public function setPagSlug(string $PagSlug): self
{
$slugger = new AsciiSlugger();
$slug = $slugger->slug($PagSlug);
$this->PagSlug = $slug;
return $this;
}
public function getPagNombre(): ?string
{
return $this->PagNombre;
}
public function setPagNombre(string $PagNombre): self
{
$this->PagNombre = $PagNombre;
return $this;
}
public function getPagTitulo(): ?string
{
return $this->PagTitulo;
}
public function setPagTitulo(string $PagTitulo): self
{
$this->PagTitulo = $PagTitulo;
return $this;
}
public function getPagPalabrasClave(): ?string
{
return $this->PagPalabrasClave;
}
public function setPagPalabrasClave(?string $PagPalabrasClave): self
{
$this->PagPalabrasClave = $PagPalabrasClave;
return $this;
}
public function getPagMetaDescripcion(): ?string
{
return $this->PagMetaDescripcion;
}
public function setPagMetaDescripcion(?string $PagMetaDescripcion): self
{
$this->PagMetaDescripcion = $PagMetaDescripcion;
return $this;
}
public function getPagIdioma(): ?string
{
return $this->PagIdioma;
}
public function setPagIdioma(string $PagIdioma): self
{
$this->PagIdioma = $PagIdioma;
return $this;
}
public function getPagEstado(): ?bool
{
return $this->PagEstado;
}
public function setPagEstado(bool $PagEstado): self
{
$this->PagEstado = $PagEstado;
return $this;
}
public function getPagEstadoTag(string $text = ''): string
{
return $this->PagEstado ?
'<span class="badge badge-light-success">'.$text.'</span>' :
'<span class="badge badge-light-danger">'.$text.'</span>'
;
}
public function getPagEstadoText(): string
{
return false === array_search($this->PagEstado, self::STATUS) ? 'pagina.estados.none' : array_search($this->PagEstado, self::STATUS);
}
public function getPagPosicion(): ?int
{
return $this->PagPosicion;
}
public function setPagPosicion(?int $PagPosicion): self
{
$this->PagPosicion = $PagPosicion;
return $this;
}
public function getPagLugar(): ?int
{
return $this->PagLugar;
}
public function setPagLugar(?int $PagLugar): self
{
$this->PagLugar = $PagLugar;
return $this;
}
public function updatePagLugarByText(string $text): self
{
$this->setPagLugar($this->getPagLugarByText($text));
return $this;
}
public function getPagLugarByText(string $text): int
{
return isset(self::LUGAR[$text]) ? self::LUGAR[$text] : 'pagina.lugares.otra';
}
public function getPagLugarText(): ?string
{
return false === array_search($this->PagLugar, self::LUGAR) ? 'pagina.lugares.otra' : array_search($this->PagLugar, self::LUGAR);
}
public function getPagPadre(): ?self
{
return $this->PagPadre;
}
public function setPagPadre(?self $PagPadre): self
{
$this->PagPadre = $PagPadre;
return $this;
}
public function getPagPadresActive(): Collection
{
return $this->id->matching(
Criteria::create()
->andWhere(Criteria::expr()->eq('PagEstado',true))
->andWhere(Criteria::expr()->eq('PagPadre',null))
);
}
/**
* @return Collection<int, self>
*/
public function getPagHijos(): Collection
{
return $this->PagHijos;
}
public function addPagHijo(self $pagHijo): self
{
if (!$this->PagHijos->contains($pagHijo)) {
$this->PagHijos[] = $pagHijo;
$pagHijo->setPagPadre($this);
}
return $this;
}
public function removePagHijo(self $pagHijo): self
{
if ($this->PagHijos->removeElement($pagHijo)) {
// set the owning side to null (unless already changed)
if ($pagHijo->getPagPadre() === $this) {
$pagHijo->setPagPadre(null);
}
}
return $this;
}
public function getPagContenidoHtml(): ?string
{
return $this->PagContenidoHtml;
}
public function setPagContenidoHtml(?string $PagContenidoHtml): self
{
$this->PagContenidoHtml = $PagContenidoHtml;
return $this;
}
}