<?php
namespace App\Entity;
use App\Repository\RankingSettingRepository;
use App\Traits\DateTrait;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation\Groups;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass=RankingSettingRepository::class)
* @ORM\HasLifecycleCallbacks
*
* @UniqueEntity(
* fields={"slug"},
* message="Ce slug existe déjà."
* )
*/
class RankingSetting
{
public CONST MODULE_NAME = 'ranking';
public CONST RANKING_SETTING_TYPES_IMPORT_MANUEL = "import_manuel";
public CONST RANKING_SETTING_TYPES_IMPORT_POINTS = "import_points";
public CONST RANKING_SETTING_TYPES = [
self::RANKING_SETTING_TYPES_IMPORT_MANUEL => "via import manuel",
self::RANKING_SETTING_TYPES_IMPORT_POINTS => "via import points (automatique)",
];
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({
* "ranking_setting",
* })
*/
private ?int $id = NULL;
/**
* @ORM\Column(type="string", length=255)
* @Groups({
* "ranking_setting",
* })
*/
private ?string $title = NULL;
/**
* @ORM\Column(type="boolean", options={"default":true})
*
* @Groups({
* "ranking_setting",
* })
*/
private bool $enabled = TRUE;
/**
* @ORM\Column(type="boolean", options={"default":false})
*
* @Groups({
* "ranking_setting",
* })
*/
private bool $provisional = FALSE;
/**
* @ORM\Column(type="string", length=255)
*
* @Assert\NotBlank(message="Le slug ne peut pas être vide.")
*
* @Assert\Regex(
* pattern="/^[a-z0-9]+(?:-[a-z0-9]+)*$/",
* message="Le slug doit contenir uniquement des lettres minuscules, chiffres et tirets."
* )
*
* @Groups({
* "ranking_setting",
* })
*/
private ?string $slug;
/**
* @ORM\OneToMany(targetEntity=RankingScore::class, mappedBy="rankingSetting")
*/
private Collection $rankingScores;
/**
* @ORM\OneToMany(targetEntity=RankingLevel::class, mappedBy="RankingSetting", cascade={"persist", "remove"}, orphanRemoval=true)
* @Assert\Valid()
*/
private Collection $rankingLevels;
/**
* @ORM\Column(type="datetime", nullable=true)
*
* @Groups({"ranking_setting"})
*/
private ?\DateTimeInterface $dateStart;
/**
* @ORM\Column(type="datetime", nullable=true)
*
* @Groups({"ranking_setting"})
*/
private ?\DateTimeInterface $dateEnd;
/**
* @ORM\Column(type="string", length=255)
* @Groups({
* "ranking_setting",
* })
*/
private ?string $rankingType = NULL;
use DateTrait;
public function __construct()
{
$this->rankingScores = new ArrayCollection();
$this->rankingLevels = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
/**
* @return Collection<int, RankingScore>
*/
public function getRankingScores(): Collection
{
return $this->rankingScores;
}
public function addRankingScore(RankingScore $rankingScore): self
{
if (!$this->rankingScores->contains($rankingScore)) {
$this->rankingScores[] = $rankingScore;
$rankingScore->setRankingSetting($this);
}
return $this;
}
public function removeRankingScore(RankingScore $rankingScore): self
{
if ($this->rankingScores->removeElement($rankingScore)) {
// set the owning side to null (unless already changed)
if ($rankingScore->getRankingSetting() === $this) {
$rankingScore->setRankingSetting(null);
}
}
return $this;
}
/**
* @return Collection<int, RankingLevel>
*/
public function getRankingLevels(): Collection
{
return $this->rankingLevels;
}
public function addRankingLevel(RankingLevel $rankingLevel): self
{
if (!$this->rankingLevels->contains($rankingLevel)) {
$this->rankingLevels[] = $rankingLevel;
$rankingLevel->setRankingSetting($this);
}
return $this;
}
public function removeRankingLevel(RankingLevel $rankingLevel): self
{
if ($this->rankingLevels->removeElement($rankingLevel)) {
// set the owning side to null (unless already changed)
if ($rankingLevel->getRankingSetting() === $this) {
$rankingLevel->setRankingSetting(null);
}
}
return $this;
}
public function getEnabled(): ?bool
{
return $this->enabled;
}
public function setEnabled( bool $enabled ): RankingSetting
{
$this->enabled = $enabled;
return $this;
}
public function getSlug(): ?string
{
return $this->slug;
}
public function setSlug(string $slug): self
{
$this->slug = $slug;
return $this;
}
public function getProvisional(): ?bool
{
return $this->provisional;
}
public function setProvisional( bool $provisional ): RankingSetting
{
$this->provisional = $provisional;
return $this;
}
public function getDateStart(): ?\DateTimeInterface
{
return $this->dateStart;
}
public function setDateStart( ?\DateTimeInterface $dateStart ): self
{
$this->dateStart = $dateStart;
return $this;
}
public function getDateEnd(): ?\DateTimeInterface
{
return $this->dateEnd;
}
public function setDateEnd( ?\DateTimeInterface $dateEnd ): self
{
$this->dateEnd = $dateEnd;
return $this;
}
public function getRankingType(): ?string
{
return $this->rankingType;
}
public function setRankingType(string $rankingType): self
{
$this->rankingType = $rankingType;
return $this;
}
}