<?php
namespace App\Entity\Site;
use App\Entity\Federation\Classe;
use App\Entity\Federation\Skipper;
use App\Entity\Federation\Team;
use App\Entity\Media\DocumentType;
use App\Entity\User\User;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use App\Entity\Federation\Boat;
use App\Entity\Media\Category;
use App\Entity\Media\Quality;
use App\Entity\Media\ShareCart;
/**
* @ORM\Entity(repositoryClass="App\Repository\Site\AccessSiteRepository")
* @ORM\Table(name="access_sites")
* @UniqueEntity(fields={"user", "site"}, message="accessSite.userSite")
*/
class AccessSite
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User\User", inversedBy="accessSites")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
* @Assert\NotBlank()
*/
private $user;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Site\Site", inversedBy="accessSites")
* @ORM\JoinColumn(name="site_id", referencedColumnName="id")
* @Assert\NotBlank()
*/
private $site;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Media\DocumentType", inversedBy="accessSites")
* @ORM\JoinTable(
* name="access_site_document_types",
* joinColumns={@ORM\JoinColumn(name="access_site_id", referencedColumnName="id", nullable=false)},
* inverseJoinColumns={@ORM\JoinColumn(name="document_type_id", referencedColumnName="id", nullable=false)}
* )
* @Assert\NotBlank()
*/
private $documentTypes;
/**
* @ORM\Column(type="integer")
*/
private $notification = 0;
/**
* @ORM\Column(type="integer")
*/
private $pressReleaseSubscription = 0;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Media\Category", inversedBy="accessSites")
* @ORM\JoinTable(
* name="access_site_categories",
* joinColumns={@ORM\JoinColumn(name="access_site_id", referencedColumnName="id", nullable=false)},
* inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id", nullable=false)}
* )
*/
private $categories;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Federation\Skipper", inversedBy="accessSites")
* @ORM\JoinTable(
* name="access_site_skippers",
* joinColumns={@ORM\JoinColumn(name="access_site_id", referencedColumnName="id", nullable=false)},
* inverseJoinColumns={@ORM\JoinColumn(name="skipper_id", referencedColumnName="id", nullable=false)}
* )
*/
private $skippers;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Federation\Boat", inversedBy="accessSites")
* @ORM\JoinTable(
* name="access_site_boats",
* joinColumns={@ORM\JoinColumn(name="access_site_id", referencedColumnName="id", nullable=false)},
* inverseJoinColumns={@ORM\JoinColumn(name="boat_id", referencedColumnName="id", nullable=false)}
* )
*/
private $boats;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Federation\Team", inversedBy="accessSites")
* @ORM\JoinTable(
* name="access_site_teams",
* joinColumns={@ORM\JoinColumn(name="access_siteid", referencedColumnName="id", nullable=false)},
* inverseJoinColumns={@ORM\JoinColumn(name="team_id", referencedColumnName="id", nullable=false)}
* )
*/
private $teams;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Federation\Classe", inversedBy="accessSites")
* @ORM\JoinTable(
* name="access_site_classes",
* joinColumns={@ORM\JoinColumn(name="access_site_id", referencedColumnName="id", nullable=false)},
* inverseJoinColumns={@ORM\JoinColumn(name="classe_id", referencedColumnName="id", nullable=false)}
* )
*/
private $classes;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Media\Quality")
* @ORM\JoinTable(
* name="access_site_qualities",
* joinColumns={@ORM\JoinColumn(name="access_site_id", referencedColumnName="id", nullable=false)},
* inverseJoinColumns={@ORM\JoinColumn(name="quality_id", referencedColumnName="id", nullable=false)}
* )
*/
private $qualities;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Media\ShareCart", mappedBy="accessSite", cascade={"remove"})
*/
private $shareCarts;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $refusalReason;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $complement;
/**
* @ORM\Column(type="datetime", nullable=false, name="created_date")
* @Gedmo\Timestampable(on="create")
*/
private $createdDate;
/**
* @ORM\Column(type="datetime", nullable=true, name="updated_date")
* @Gedmo\Timestampable(on="update")
*/
private $updatedDate;
/**
* @ORM\Column(type="integer", nullable=false, name="status")
*/
private $status = 2;
public function __construct()
{
$this->documentTypes = new ArrayCollection();
$this->categories = new ArrayCollection();
$this->skippers = new ArrayCollection();
$this->boats = new ArrayCollection();
$this->teams = new ArrayCollection();
$this->classes = new ArrayCollection();
$this->qualities = new ArrayCollection();
$this->shareCarts = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getNotification(): ?int
{
return $this->notification;
}
public function setNotification(int $notification): self
{
$this->notification = $notification;
return $this;
}
public function getPressReleaseSubscription(): ?int
{
return $this->pressReleaseSubscription;
}
public function setPressReleaseSubscription(int $pressReleaseSubscription): self
{
$this->pressReleaseSubscription = $pressReleaseSubscription;
return $this;
}
public function getCreatedDate(): ?\DateTimeInterface
{
return $this->createdDate;
}
public function getUpdatedDate(): ?\DateTimeInterface
{
return $this->updatedDate;
}
public function getStatus(): ?int
{
return $this->status;
}
public function setStatus(int $status): self
{
$this->status = $status;
return $this;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
public function getSite(): ?Site
{
return $this->site;
}
public function setSite(?Site $site): self
{
$this->site = $site;
return $this;
}
public function getRefusalReason(): ?string
{
return $this->refusalReason;
}
public function setRefusalReason(string $refusalReason = null): self
{
$this->refusalReason = $refusalReason;
return $this;
}
public function getComplement(): ?string
{
return $this->complement;
}
public function setComplement(string $complement = null): self
{
$this->complement = $complement;
return $this;
}
/**
* @return Collection|DocumentType[]
*/
public function getDocumentTypes(): Collection
{
return $this->documentTypes;
}
public function addDocumentType(DocumentType $documentType): self
{
if (!$this->documentTypes->contains($documentType)) {
$this->documentTypes[] = $documentType;
}
return $this;
}
public function removeDocumentType(DocumentType $documentType): self
{
if ($this->documentTypes->contains($documentType)) {
$this->documentTypes->removeElement($documentType);
}
return $this;
}
/**
* @return Collection|Category[]
*/
public function getCategories(): Collection
{
return $this->categories;
}
public function addCategory(Category $category): self
{
if (!$this->categories->contains($category)) {
$this->categories[] = $category;
}
return $this;
}
public function removeCategory(Category $category): self
{
if ($this->categories->contains($category)) {
$this->categories->removeElement($category);
}
return $this;
}
/**
* @return Collection|Skipper[]
*/
public function getSkippers(): Collection
{
return $this->skippers;
}
public function addSkipper(Skipper $skipper): self
{
if (!$this->skippers->contains($skipper)) {
$this->skippers[] = $skipper;
}
return $this;
}
public function removeSkipper(Skipper $skipper): self
{
if ($this->skippers->contains($skipper)) {
$this->skippers->removeElement($skipper);
}
return $this;
}
/**
* @return Collection|Boat[]
*/
public function getBoats(): Collection
{
return $this->boats;
}
public function addBoat(Boat $boat): self
{
if (!$this->boats->contains($boat)) {
$this->boats[] = $boat;
}
return $this;
}
public function removeBoat(Boat $boat): self
{
if ($this->boats->contains($boat)) {
$this->boats->removeElement($boat);
}
return $this;
}
/**
* @return Collection|Team[]
*/
public function getTeams(): Collection
{
return $this->teams;
}
public function addTeam(Team $team): self
{
if (!$this->teams->contains($team)) {
$this->teams[] = $team;
}
return $this;
}
public function removeTeam(Team $team): self
{
if ($this->teams->contains($team)) {
$this->teams->removeElement($team);
}
return $this;
}
/**
* @return Collection|Classe[]
*/
public function getClasses(): Collection
{
return $this->classes;
}
public function addClass(Classe $class): self
{
if (!$this->classes->contains($class)) {
$this->classes[] = $class;
}
return $this;
}
public function removeClass(Classe $class): self
{
if ($this->classes->contains($class)) {
$this->classes->removeElement($class);
}
return $this;
}
/**
* @return Collection|Quality[]
*/
public function getQualities(): Collection
{
return $this->qualities;
}
public function addQuality(Quality $quality): self
{
if (!$this->qualities->contains($quality)) {
$this->qualities[] = $quality;
}
return $this;
}
public function removeQuality(Quality $quality): self
{
if ($this->qualities->contains($quality)) {
$this->qualities->removeElement($quality);
}
return $this;
}
/**
* @return Collection|ShareCart[]
*/
public function getShareCarts(): Collection
{
return $this->shareCarts;
}
public function addShareCart(ShareCart $shareCart): self
{
if (!$this->shareCarts->contains($shareCart)) {
$this->shareCarts[] = $shareCart;
}
return $this;
}
public function removeShareCart(AccessSite $shareCart): self
{
if ($this->shareCarts->contains($shareCart)) {
$this->shareCarts->removeElement($shareCart);
}
return $this;
}
/**
* @Assert\Callback
*/
public function valiate(ExecutionContextInterface $context)
{
if ($this->documentTypes->count() == 0) {
$context->addViolation('Vous devez sélectionner au moins un type de document', array(), null);
}
}
public function allowToDownloadPictures(): bool
{
if($this->qualities->count() == 0)
return false;
return true;
}
}