<?php
namespace App\Entity;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use App\Misc\StringUtils;
use App\Validation as ExcAssert;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Constraints\UrlValidator;
/**
* Page
*
* @ORM\Table(name="Page")
* @ORM\Entity(repositoryClass="App\Entity\PageRepository")
*/
class Page
{
// /!\ Do not change constants names, they're used as string in templates!
// shared types
public const TYPE_CATEGORIE = 'categorie';
public const TYPE_LOCAL = 'local';
public const TYPE_ACTU = 'actu';
public const TYPE_NEWSLETTER = 'newsletter';
// single types
public const TYPE_LOCAL_INDEX = 'local_index';
public const TYPE_INDEX = 'index';
public const TYPE_AIDE = 'aide';
public const TYPE_CGUV = 'cguv';
public const TYPE_QUALITY = 'quality';
public const TYPE_LEGAL = 'legal';
public const TYPE_LINKS = 'links';
public const TYPE_PRIX = 'prix';
public static $miscPages = array(
self::TYPE_INDEX,
self::TYPE_LINKS,
self::TYPE_CGUV,
self::TYPE_LEGAL,
self::TYPE_QUALITY,
self::TYPE_LOCAL_INDEX,
self::TYPE_AIDE,
self::TYPE_PRIX,
);
public static function createWithId($id)
{
$instance = new self();
$instance->id = $id;
return $instance;
}
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="type", type="string", length=255, nullable=true)
*/
private $type;
/**
* @var DateTime
*
* @ORM\Column(name="creation_date", type="datetime")
*/
private $creationDate;
/**
* @var DateTime
*
* @ORM\Column(name="modified_date", type="datetime")
*/
private $modifiedDate;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
*/
private $title;
/**
* @var string
*
* @ORM\Column(name="menu_label", type="string", length=255)
*/
private $menuLabel;
/**
* @var string
*
* @ORM\Column(name="page_title", type="string", length=255)
*/
private $pageTitle;
/**
* @var string
*
* @ORM\Column(name="page_description", type="string", length=255)
* @Assert\Length(
* max=220,
* maxMessage="La longueur de la description doit être inférieure à 140 caractères"
* )
*/
private $pageDescription;
/**
* @var text
*
* @ORM\Column(name="bandeau_text_1", type="text", nullable=true)
*/
private $bandeauText1;
/**
* @var text
*
* @ORM\Column(name="bandeau_text_2", type="text", nullable=true)
*/
private $bandeauText2;
/**
* @var text
*
* @ORM\Column(name="bandeau_text_3", type="text", nullable=true)
*/
private $bandeauText3;
/**
* @var string
*
* @ORM\Column(name="content", type="text")
*/
private $content;
/**
* @var int
*
* @ORM\Column(name="page_order", type="integer", nullable=true)
*/
private $order = null;
/**
* @var Page
*
* @ORM\ManyToOne(targetEntity="Page")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true)
*/
private $parent = null;
/**
* @var Url
*
* @ORM\OneToOne(targetEntity="Url", inversedBy="page", cascade={"remove"})
* @ORM\JoinColumn(name="url_id", referencedColumnName="id", nullable=true)
*/
private $url;
/**
* @var string
*/
private $transientUrl;
/**
* @var string
* @ORM\Column(name="robots", type="string", nullable=true)
*/
private $robots;
/**
* @var Collection
*
* @ORM\OneToMany(targetEntity="PageMeta", mappedBy="page", cascade={"persist","remove"})
*/
private $metas;
public function __construct()
{
$this->creationDate = new DateTime();
$this->modifiedDate = new DateTime();
$this->metas = new ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set type
*
* @param string $type
*
* @return Page
*/
public function setType($type)
{
$this->type = $type;
return $this;
}
/**
* Get type
*
* @return string
*/
public function getType()
{
return $this->type;
}
/**
* Set creationDate
*
* @param \DateTime $creationDate
*
* @return Page
*/
public function setCreationDate($creationDate)
{
$this->creationDate = $creationDate;
return $this;
}
/**
* Get creationDate
*
* @return \DateTime
*/
public function getCreationDate()
{
return $this->creationDate;
}
/**
* Set updateDate
*
* @param \DateTime $modifiedDate
*
* @return Page
*/
public function setModifiedDate($modifiedDate)
{
$this->modifiedDate = $modifiedDate;
return $this;
}
/**
* Get updateDate
*
* @return \DateTime
*/
public function getModifiedDate()
{
return $this->modifiedDate;
}
/**
* Set title
*
* @param string $title
*
* @return Page
*/
public function setTitle($title)
{
$this->title = $title;
if (!$this->menuLabel) {
$this->menuLabel = $title;
}
if (!$this->pageTitle) {
$this->pageTitle = $title;
}
return $this;
}
/**
* Get title
*
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* Set menuLabel
*
* @param string $menuLabel
*
* @return Page
*/
public function setMenuLabel($menuLabel)
{
$this->menuLabel = $menuLabel;
if (!$this->title) {
$this->title = $menuLabel;
}
return $this;
}
/**
* Get menuLabel
*
* @return string
*/
public function getMenuLabel()
{
return $this->menuLabel;
}
/**
* Set pageTitle
*
* @param string $pageTitle
*
* @return Page
*/
public function setPageTitle($pageTitle)
{
$this->pageTitle = $pageTitle;
return $this;
}
/**
* Get pageTitle
*
* @return string
*/
public function getPageTitle()
{
return $this->pageTitle;
}
public function getSanitizedTitle()
{
return StringUtils::sanitizeString($this->pageTitle);
}
/**
* Set pageDescription
*
* @param string $pageDescription
*
* @return Page
*/
public function setPageDescription($pageDescription)
{
$this->pageDescription = $pageDescription;
return $this;
}
/**
* Get pageDescription
*
* @return string
*/
public function getPageDescription()
{
return $this->pageDescription;
}
/**
* Set bandeauText1
*
* @param string $bandeauText1
* @return Page
*/
public function setBandeauText1($bandeauText1)
{
$this->bandeauText1 = $bandeauText1;
return $this;
}
/**
* Get bandeauText1
*
* @return string
*/
public function getBandeauText1()
{
return $this->bandeauText1;
}
/**
* Set bandeauText2
*
* @param string $bandeauText2
* @return Page
*/
public function setBandeauText2($bandeauText2)
{
$this->bandeauText2 = $bandeauText2;
return $this;
}
/**
* Get bandeauText2
*
* @return string
*/
public function getBandeauText2()
{
return $this->bandeauText2;
}
/**
* Set bandeauText3
*
* @param string $bandeauText3
* @return Page
*/
public function setBandeauText3($bandeauText3)
{
$this->bandeauText3 = $bandeauText3;
return $this;
}
/**
* Get bandeauText3
*
* @return string
*/
public function getBandeauText3()
{
return $this->bandeauText3;
}
/**
* Set content
*
* @param string $content
*
* @return Page
*/
public function setContent($content)
{
$this->content = $content;
return $this;
}
/**
* Get content
*
* @return string
*/
public function getContent()
{
return $this->content;
}
public function getExcerpt($max)
{
// '/\s+?(\S+)?$/', '',
$text = trim(strip_tags($this->content));
if (strlen($text) > $max) {
return preg_replace(
'/\s+?(\S*)?$/',
'',
substr($text, 0, $max)
) . '…';
}
return $text;
}
/**
* @return int
*/
public function getOrder()
{
return $this->order;
}
/**
* @param int $order
*/
public function setOrder($order)
{
$this->order = $order;
}
/**
* @return Url
*/
public function getUrl()
{
return $this->url;
}
/**
* @param Url $url
*/
public function setUrl($url)
{
$this->url = $url;
}
/**
* @return Page
*/
public function getParent()
{
return $this->parent;
}
/**
* @param Page $parent
*/
public function setParent($parent)
{
$this->parent = $parent;
}
/**
* @return PageMeta[]
*/
public function getMetas()
{
return $this->metas;
}
public function getMeta($key)
{
/** @var PageMeta $meta */
foreach ($this->metas as $meta) {
if ($meta->getKey() == $key) {
return $meta->getValue();
}
}
return null;
}
public function getMetaEntity($key)
{
foreach ($this->metas as $meta) {
if ($meta->getKey() == $key) {
return $meta;
}
}
return null;
}
public function setMeta($key, $value)
{
$meta = $this->getMetaEntity($key);
if (!$meta) {
$meta = new PageMeta();
$meta->setKey($key);
$this->addMeta($meta);
$meta->setPage($this);
}
$meta->setValue($value);
return $this;
}
/**
* @param PageMeta[] $metas
*/
public function setMetas($metas)
{
$this->metas = $metas;
}
/**
* Add metas
*
* @param PageMeta $meta
*
* @return Page
*/
public function addMeta(PageMeta $meta)
{
$this->metas[] = $meta;
return $this;
}
/**
* Remove metas
*
* @param PageMeta $metas
*/
public function removeMeta(PageMeta $metas)
{
$this->metas->removeElement($metas);
}
/**
* @return string
*/
public function getTransientUrl()
{
return $this->transientUrl;
}
/**
* @param string $transientUrl
*/
public function setTransientUrl($transientUrl)
{
$this->transientUrl = $transientUrl;
}
public function __toString()
{
return $this->menuLabel;
}
/**
* @return string
*/
public function getRobots()
{
return $this->robots;
}
/**
* @param string $robots
*/
public function setRobots($robots)
{
$this->robots = $robots;
}
}