<?php
namespace App\Entity\Content\Menus;
use Symfony\Component\Validator\Constraints AS Constraints;
use Symfony\Component\Validator\Constraints AS Assert;
use Doctrine\ORM\Mapping AS ORM;
use Ramsey\Uuid\Uuid;
use App\Entity\BaseEntity;
use App\Entity\Content\Pages\Page;
/**
* @ORM\Entity(repositoryClass="App\Repository\Content\Menus\MenuItemRepository")
* @ORM\Table(name="content_menus_menuitem")
*/
class MenuItem extends BaseEntity
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="uuid")
* @Assert\Uuid
*/
protected $uuid;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime", nullable=false)
*/
private $created;
/**
* @ORM\Column(type="string", length=180, nullable=true)
*/
private $label;
/**
* @ORM\Column(type="string", length=180, nullable=true)
*/
private $url;
/**
* @ORM\Column(type="boolean", nullable=false)
*/
private $autoUpdate;
/**
* @ORM\Column(type="boolean", nullable=false)
*/
private $openNewWindow;
/**
* @ORM\Column(type="integer", length=10, nullable=false)
*/
private $displayOrder;
/**
* @ORM\Column(type="string", length=60, nullable=false)
*/
private $type;
/**
* @ORM\ManyToOne(targetEntity="Menu", inversedBy="menuItems")
* @ORM\JoinColumn(name="menu_id", referencedColumnName="id")
**/
private $menu;
/**
* @ORM\ManyToOne(targetEntity="\App\Entity\Content\Pages\Page")
* @ORM\JoinColumn(name="page_id", referencedColumnName="id", onDelete="cascade")
**/
private $page;
/**
* @ORM\ManyToOne(targetEntity="MenuItem", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
**/
private $parent;
/**
* @ORM\OneToMany(targetEntity="MenuItem", mappedBy="parent", cascade={"all"})
* @ORM\OrderBy({"displayOrder" = "ASC"})
**/
private $children;
public function __construct(array $defaults = array())
{
// Defaults
$this->setUuid(Uuid::uuid4());
$this->setCreated(new \DateTime());
$this->setDisplayOrder(time());
$this->children = array();
$this->autoUpdate = true;
$this->openNewWindow = false;
parent::__construct($defaults);
}
public function __toString()
{
return strval($this->getId());
}
public function getFriendlyLabel()
{
// Already got a label?
if($this->getLabel())
return $this->getLabel();
// Got a page?
if($this->getPage())
return $this->getPage()->getName();
// Special type?
if($this->getType() == "lettings")
{
return "Lettings";
}
elseif($this->getType() == "sales")
{
return "Sales";
}
return "Unknown";
}
public function getFriendlyTarget()
{
// Got a page?
if($this->getPage())
{
// Is it the index?
if($this->getPage()->getPath() == "index")
return '/';
else
return '/' . $this->getPage()->getPath();
}
elseif($this->getUrl())
return $this->getUrl();
elseif($this->getType() == "lettings")
{
return "/lettings";
}
elseif($this->getType() == "sales")
{
return "/sales";
}
return "#";
}
public function getId()
{
return $this->id;
}
public function setUuid($uuid)
{
$this->uuid = $uuid;
return $this;
}
public function getUuid()
{
return $this->uuid;
}
public function setCreated(\DateTime $created)
{
$this->created = $created;
}
public function getCreated()
{
return $this->created;
}
public function getLabel()
{
return $this->label;
}
public function setLabel(string $label = null)
{
$this->label = $label;
}
public function getUrl()
{
return $this->url;
}
public function setUrl(string $url = null)
{
$this->url = $url;
}
public function setMenu(\App\Entity\Content\Menus\Menu $menu = null)
{
$this->menu = $menu;
$menu->addMenuItem($this);
return $this;
}
public function getMenu()
{
return $this->menu;
}
public function getDisplayOrder()
{
return $this->displayOrder;
}
public function setDisplayOrder(int $displayOrder)
{
$this->displayOrder = $displayOrder;
}
public function setPage(\App\Entity\Content\Pages\Page $page)
{
$this->page = $page;
return $this;
}
public function getPage()
{
return $this->page;
}
public function setParent(\App\Entity\Content\Menus\MenuItem $menuItem = null)
{
$this->parent = $menuItem;
return $this;
}
public function getParent()
{
return $this->parent;
}
public function addChild(\App\Entity\Content\Menus\MenuItem $menuItem)
{
if(!in_array($menuItem, (array)$this->children))
$this->children[] = $menuItem;
if($menuItem->getParent() != $this)
$menuItem->setParent($this);
return $this;
}
public function removeChild(\App\Entity\Content\Menus\MenuItem $menuItem)
{
$this->children->removeElement($menuItem);
$menuItem->setMenu(null);
}
public function getChildren()
{
return $this->children;
}
public function getAutoUpdate()
{
return $this->autoUpdate;
}
public function setAutoUpdate($autoUpdate)
{
$this->autoUpdate = $autoUpdate;
return $this;
}
public function getOpenNewWindow()
{
return $this->openNewWindow;
}
public function setOpenNewWindow($openNewWindow)
{
$this->openNewWindow = $openNewWindow;
return $this;
}
public function getType()
{
return $this->type;
}
public function setType($type)
{
$this->type = $type;
return $this;
}
}