<?php
namespace App\Entity;
use App\Repository\RankingLevelRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass=RankingLevelRepository::class)
*
* @UniqueEntity(
* fields={"slug"},
* message="Ce slug existe déjà."
* )
*/
class RankingLevel
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private ?int $id;
/**
* @ORM\Column(type="string", length=255)
*
*/
private ?string $label;
/**
* @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."
* )
*/
private ?string $slug;
/**
* @ORM\ManyToOne(targetEntity=RankingSetting::class, inversedBy="rankingLevels")
* @ORM\JoinColumn(nullable=false)
*/
private ?RankingSetting $RankingSetting;
/**
* @ORM\OneToMany(targetEntity=RankingScore::class, mappedBy="rankingLevel")
*/
private Collection $rankingScores;
/**
* Rang requis pour atteindre ce palier
*
* @ORM\Column(type="integer")
*
* @Assert\PositiveOrZero
*/
private ?int $requiredRank = NULL;
/**
* Pourcentage de bonus
*
* @ORM\Column(type="float")
*
* @Assert\PositiveOrZero
*/
private ?float $percentageWhenAchieved = NULL;
/**
* Bonus lors de l'atteinte du rang
*
* @ORM\Column(type="integer", options={"default":0})
*
* @Assert\PositiveOrZero
*/
private int $bonusWhenAchieved = 0;
/**
* Tous les users ayant atteints ce palier
*
* @ORM\Column(type="json", nullable=true)
*/
private ?string $usersReachedTheLevel = NULL;
public function __construct()
{
$this->rankingScores = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getLabel(): ?string
{
return $this->label;
}
public function setLabel(string $label): self
{
$this->label = $label;
return $this;
}
public function getSlug(): ?string
{
return $this->slug;
}
public function setSlug(string $slug): self
{
$this->slug = $slug;
return $this;
}
public function getRankingSetting(): ?RankingSetting
{
return $this->RankingSetting;
}
public function setRankingSetting(?RankingSetting $RankingSetting): self
{
$this->RankingSetting = $RankingSetting;
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->setRankingLevel($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->getRankingLevel() === $this) {
$rankingScore->setRankingLevel(null);
}
}
return $this;
}
public function getRequiredRank(): ?int
{
return $this->requiredRank;
}
public function setRequiredRank(int $requiredRank): self
{
$this->requiredRank = $requiredRank;
return $this;
}
public function getPercentageWhenAchieved(): ?float
{
return $this->percentageWhenAchieved;
}
public function setPercentageWhenAchieved(float $percentageWhenAchieved): self
{
$this->percentageWhenAchieved = $percentageWhenAchieved;
return $this;
}
public function getBonusWhenAchieved(): int
{
return $this->bonusWhenAchieved;
}
public function setBonusWhenAchieved(int $bonusWhenAchieved): self
{
$this->bonusWhenAchieved = $bonusWhenAchieved;
return $this;
}
public function getUsersReachedTheLevelToArray(): array
{
if($this->usersReachedTheLevel) {
return json_decode($this->usersReachedTheLevel, TRUE);
}
return [];
}
public function getUsersReachedTheLevel(): ?string
{
return $this->usersReachedTheLevel;
}
public function setUsersReachedTheLevel(?string $usersReachedTheLevel): self
{
$this->usersReachedTheLevel = $usersReachedTheLevel;
return $this;
}
}