<?php
namespace App\CmsBundle\Entity;
use App\CasinoBundle\Entity\Country;
use App\CasinoBundle\Entity\NewBonus;
use App\CmsBundle\Enum\LogActionEnum;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(
* name="site",
* indexes={
* @ORM\Index(name="site_default_locale_index", columns={"default_locale_id"}),
* @ORM\Index(name="site_default_country_index", columns={"default_country_id"}),
* @ORM\Index(name="site_canonical_index", columns={"canonical_id"})
* }
* )
* @ORM\Entity(repositoryClass="App\CmsBundle\Repository\SiteRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Site implements LogInterface
{
use IdTrait, TitleTrait, TimeStampedTrait, ParametersTrait, LogTrait;
/**
* @ORM\Column(type="string", length=255)
*/
private $domain;
/**
* @ORM\OneToOne(targetEntity="App\CmsBundle\Entity\SiteInfo", mappedBy="site", cascade={"persist","remove"})
*/
private $info;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $template;
/**
* @ORM\Cache("NONSTRICT_READ_WRITE")
* @ORM\ManyToOne(targetEntity="App\CmsBundle\Entity\Locale", cascade={"persist"})
*/
private $defaultLocale;
/**
* @ORM\Cache("NONSTRICT_READ_WRITE")
* @ORM\ManyToOne(targetEntity="App\CasinoBundle\Entity\Country", cascade={"persist"})
*/
private $defaultCountry;
/**
* @var ArrayCollection
* @ORM\OneToMany(targetEntity="App\CmsBundle\Entity\Route", mappedBy="site", cascade={"persist","remove"})
*/
private $routes;
/**
* @var ArrayCollection
* @ORM\OneToMany(targetEntity="App\CmsBundle\Entity\Redirect", mappedBy="site", cascade={"persist","remove"})
*/
private $redirects;
/**
* @var ArrayCollection
* @ORM\JoinColumn(nullable=true)
* @ORM\OneToMany(targetEntity="App\CmsBundle\Entity\Directory", mappedBy="site", cascade={"persist","remove"})
*/
private $directories;
/**
* @ORM\ManyToMany(targetEntity="App\CmsBundle\Entity\Locale", inversedBy="availableSites", cascade={"persist"})
* @ORM\JoinTable(
* name="site_locale",
* joinColumns={
* @ORM\JoinColumn(name="site_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="locale_id", referencedColumnName="id")
* }
* )
*/
protected $availableLocales;
/**
* @ORM\OneToMany(targetEntity="App\CmsBundle\Entity\Menu", mappedBy="site", cascade={"persist","remove"})
*/
private $menus;
/**
* @ORM\OneToMany(targetEntity="App\CmsBundle\Entity\SitemapImport", mappedBy="site", cascade={"persist","remove"})
*/
private $sitemapImports;
/**
* @ORM\ManyToOne(targetEntity="App\CmsBundle\Entity\Site", inversedBy="canonicals", fetch="EAGER")
* @ORM\JoinColumn(nullable=true)
*/
private $canonical;
/**
* @ORM\OneToMany(targetEntity="App\CmsBundle\Entity\Site", mappedBy="canonical", cascade={"persist","remove"})
*/
private $canonicals;
/**
* @ORM\ManyToMany(
* targetEntity="App\CasinoBundle\Entity\NewBonus",
* mappedBy="sites",
* cascade={"persist"}
* )
*/
private Collection $newBonuses;
/**
* @ORM\ManyToOne(targetEntity="App\CmsBundle\Entity\Site", inversedBy="relates", fetch="EXTRA_LAZY")
* @ORM\JoinColumn(nullable=true)
*/
private $relatedTo;
/**
* @ORM\OneToMany(targetEntity="App\CmsBundle\Entity\Site", mappedBy="relatedTo", cascade={"persist","remove"})
*/
private $relates;
public function __toString()
{
return $this->domain;
}
public function __construct()
{
$this->info = (new SiteInfo())->setSite($this);
$this->availableLocales = new ArrayCollection();
$this->canonicals = new ArrayCollection();
$this->directories = new ArrayCollection();
$this->routes = new ArrayCollection();
$this->newBonuses = new ArrayCollection();
$this->parameters = json_encode([]);
$this->relates = new ArrayCollection();
}
/**
* @return string|null
*/
public function getTitle(): ?string
{
return ($this->getCanonical())
? $this->getCanonical()->getTitle()
: $this->title;
}
/**
* @return string|null
*/
public function getDomain(): ?string
{
return $this->domain;
}
/**
* @param string $domain
* @return $this
*/
public function setDomain(string $domain): self
{
$this->domain = $domain;
if (!$this->title) {
$this->setTitle($domain);
}
return $this;
}
/**
* @return string|null
*/
public function getTemplate(): ?string
{
return $this->template;
}
/**
* @param string|null $template
* @return $this
*/
public function setTemplate(?string $template): self
{
$this->template = $template;
return $this;
}
/**
* @return SiteInfo|null
*/
public function getInfo(): ?SiteInfo
{
return $this->info;
}
/**
* @param SiteInfo $info
* @return $this
*/
public function setInfo(SiteInfo $info): self
{
$this->info = $info;
return $this;
}
/**
* @return Locale|null
*/
public function getDefaultLocale(): ?Locale
{
return $this->defaultLocale;
}
/**
* @param Locale|null $defaultLocale
* @return $this
*/
public function setDefaultLocale(?Locale $defaultLocale): self
{
$this->defaultLocale = $defaultLocale;
return $this;
}
/**
* @return Country|null
*/
public function getDefaultCountry(): ?Country
{
return $this->defaultCountry;
}
/**
* @param Country|null $defaultCountry
* @return $this
*/
public function setDefaultCountry(?Country $defaultCountry): self
{
$this->defaultCountry = $defaultCountry;
return $this;
}
/**
* @return Collection|Route[]
*/
public function getRoutes(): Collection
{
return $this->routes;
}
/**
* @param Route $route
* @return $this
*/
public function addRoute(Route $route): self
{
if (!$this->routes->contains($route)) {
$this->routes->add($route);
$this->addCollectionLog(LogActionEnum::ADD, 'route', $route);
}
return $this;
}
/**
* @param Route $route
* @return $this
*/
public function removeRoute(Route $route): self
{
if ($this->routes->contains($route)) {
$this->routes->removeElement($route);
$this->addCollectionLog(LogActionEnum::REMOVE, 'route', $route);
}
return $this;
}
/**
* @return Collection|Redirect[]
*/
public function getRedirects(): Collection
{
return $this->redirects;
}
/**
* @param Redirect $redirect
* @return $this
*/
public function addRedirect(Redirect $redirect): self
{
if (!$this->redirects->contains($redirect)) {
$this->redirects->add($redirect);
$this->addCollectionLog(LogActionEnum::ADD, 'redirect', $redirect);
}
return $this;
}
/**
* @param Redirect $redirect
* @return $this
*/
public function removeRedirect(Redirect $redirect): self
{
if ($this->redirects->contains($redirect)) {
$this->redirects->removeElement($redirect);
$this->addCollectionLog(LogActionEnum::REMOVE, 'redirect', $redirect);
}
return $this;
}
/**
* @return Collection|Menu[]
*/
public function getMenus(): Collection
{
return $this->menus;
}
/**
* @param Menu $menu
* @return $this
*/
public function addMenu(Menu $menu): self
{
if (!$this->menus->contains($menu)) {
$this->menus->add($menu);
$this->addCollectionLog(LogActionEnum::ADD, 'menu', $menu);
}
return $this;
}
/**
* @param Menu $menu
* @return $this
*/
public function removeMenu(Menu $menu): self
{
if ($this->menus->contains($menu)) {
$this->menus->removeElement($menu);
$this->addCollectionLog(LogActionEnum::REMOVE, 'menu', $menu);
}
return $this;
}
/**
* @return Collection|Locale[]
*/
public function getAvailableLocales(): Collection
{
return $this->availableLocales;
}
/**
* @param Locale $locale
* @return $this
*/
public function addAvailableLocale(Locale $locale): self
{
if (!$this->availableLocales->contains($locale)) {
$this->availableLocales[] = $locale;
$this->addCollectionLog(LogActionEnum::ADD, 'availableLocale', $locale);
}
return $this;
}
/**
* @param Locale $locale
* @return $this
*/
public function removeAvailableLocale(Locale $locale): self
{
if ($this->availableLocales->contains($locale)) {
$this->availableLocales->removeElement($locale);
$this->addCollectionLog(LogActionEnum::REMOVE, 'availableLocale', $locale);
}
return $this;
}
/**
* @return Site|null
*/
public function getCanonical(): ?Site
{
return $this->canonical;
}
/**
* @param Site|null $canonical
* @return $this
*/
public function setCanonical(?Site $canonical): self
{
$this->canonical = $canonical;
return $this;
}
/**
* @return Collection|Site[]
*/
public function getCanonicals(): Collection
{
return $this->canonicals;
}
public function addCanonical(Site $canonical): self
{
if (!$this->canonicals->contains($canonical)) {
$this->canonicals[] = $canonical;
$canonical->setCanonical($this);
$this->addCollectionLog(LogActionEnum::ADD, 'canonical', $canonical);
}
return $this;
}
public function removeCanonical(Site $canonical): self
{
if ($this->canonicals->contains($canonical)) {
$this->canonicals->removeElement($canonical);
// set the owning side to null (unless already changed)
if ($canonical->getCanonical() === $this) {
$canonical->setCanonical(null);
}
$this->addCollectionLog(LogActionEnum::REMOVE, 'canonical', $canonical);
}
return $this;
}
/**
* @return Collection
*/
public function getDirectories(): Collection
{
return $this->directories;
}
/**
* @param Directory $directory
* @return $this
*/
public function addDirectory(Directory $directory): self
{
if (!$this->directories->contains($directory)) {
$this->directories[] = $directory;
$directory->setSite($this);
$this->addCollectionLog(LogActionEnum::ADD, 'directory', $directory);
}
return $this;
}
/**
* @param Directory $directory
* @return $this
*/
public function removeDirectory(Directory $directory): self
{
if ($this->directories->contains($directory)) {
$this->directories->removeElement($directory);
// set the owning side to null (unless already changed)
if ($directory->getSite() === $this) {
$directory->setSite(null);
}
$this->addCollectionLog(LogActionEnum::REMOVE, 'directory', $directory);
}
return $this;
}
/**
* @return Collection
*/
public function getNewBonuses(): Collection
{
return $this->newBonuses;
}
/**
* @param NewBonus $newBonus
* @return $this
*/
public function addNewBonus(NewBonus $newBonus): self
{
if (!$this->newBonuses->contains($newBonus)) {
$this->newBonuses[] = $newBonus;
$newBonus->addSite($this);
$this->addCollectionLog(LogActionEnum::ADD, 'newBonus', $newBonus);
}
return $this;
}
/**
* @param NewBonus $newBonus
* @return $this
*/
public function removeNewBonus(NewBonus $newBonus): self
{
if ($this->newBonuses->contains($newBonus)) {
$this->newBonuses->removeElement($newBonus);
$newBonus->removeSite($this);
$this->addCollectionLog(LogActionEnum::REMOVE, 'newBonus', $newBonus);
}
return $this;
}
/**
* @return Site|null
*/
public function getRelatedTo(): ?Site
{
return $this->relatedTo;
}
/**
* @param Site|null $relatedTo
* @return $this
*/
public function setRelatedTo(?Site $relatedTo): self
{
$this->relatedTo = $relatedTo;
return $this;
}
/**
* @return Collection|Site[]
*/
public function getRelates(): Collection
{
return $this->relates;
}
/**
* @param Site $relate
* @return $this
*/
public function addRelates(Site $relate): self
{
if (!$this->relates->contains($relate)) {
$this->relates[] = $relate;
$relate->setRelatedTo($this);
$this->addCollectionLog(LogActionEnum::ADD, 'relates', $relate);
}
return $this;
}
/**
* @param Site $relate
* @return $this
*/
public function removeRelates(Site $relate): self
{
if ($this->relates->contains($relate)) {
$this->relates->removeElement($relate);
if ($relate->getRelatedTo() === $this) {
$relate->setRelatedTo(null);
}
$this->addCollectionLog(LogActionEnum::REMOVE, 'relates', $relate);
}
return $this;
}
}