mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-07-01 14:36:13 +00:00
171 lines
3.7 KiB
PHP
171 lines
3.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Chill\AsideActivityBundle\Entity;
|
|
|
|
use Doctrine\Common\Collections\ArrayCollection;
|
|
use Doctrine\Common\Collections\Collection;
|
|
use Doctrine\ORM\Mapping as ORM;
|
|
use Symfony\Component\Validator\Constraints as Assert;
|
|
use Symfony\Component\Validator\Context\ExecutionContextInterface;
|
|
|
|
/**
|
|
* @ORM\Entity
|
|
* @ORM\Table(schema="chill_asideactivity")
|
|
*/
|
|
class AsideActivityCategory
|
|
{
|
|
/**
|
|
* @ORM\Id
|
|
* @ORM\GeneratedValue
|
|
* @ORM\Column(type="integer")
|
|
*/
|
|
private int $id;
|
|
|
|
/**
|
|
* @ORM\Column(type="json", length=255)
|
|
*/
|
|
private array $title;
|
|
|
|
/**
|
|
* @ORM\OneToMany(targetEntity=AsideActivityCategory::class, mappedBy="parent")
|
|
* @ORM\Column(type="boolean")
|
|
*/
|
|
private bool $isActive = true;
|
|
|
|
/**
|
|
* @var float
|
|
* @ORM\Column(type="float", options={"default": 0.00})
|
|
*/
|
|
private float $ordering = 0.00;
|
|
|
|
/**
|
|
* @ORM\ManyToOne(targetEntity=AsideActivityCategory::class, inversedBy="children")
|
|
* @ORM\JoinColumn(nullable=true)
|
|
*/
|
|
private ?AsideActivityCategory $parent = null;
|
|
|
|
/**
|
|
* @ORM\OneToMany(targetEntity=AsideActivityCategory::class, mappedBy="parent")
|
|
*/
|
|
private $children;
|
|
|
|
private AsideActivityCategory $oldParent;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->children = new ArrayCollection();
|
|
}
|
|
|
|
public function getId(): ?int
|
|
{
|
|
return $this->id;
|
|
}
|
|
|
|
public function getTitle(): ?array
|
|
{
|
|
return $this->title;
|
|
}
|
|
|
|
public function setTitle(array $title): self
|
|
{
|
|
$this->title = $title;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getIsActive(): bool
|
|
{
|
|
return $this->isActive;
|
|
}
|
|
|
|
public function setIsActive(bool $isActive): self
|
|
{
|
|
$this->isActive = $isActive;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getParent(): ?self
|
|
{
|
|
return $this->parent;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @Assert\Callback()
|
|
*/
|
|
public function preventRecursiveParent(ExecutionContextInterface $context, $payload)
|
|
{
|
|
if (!$this->hasParent()) {
|
|
return;
|
|
}
|
|
|
|
if ($this->getParent() === $this) {
|
|
// replace parent with old parent. This prevent recursive loop
|
|
// when displaying form
|
|
$this->parent = $this->oldParent;
|
|
$context->buildViolation('You must not add twice the same category in the parent tree (previous result returned)')
|
|
->atPath('parent')
|
|
->addViolation()
|
|
;
|
|
}
|
|
}
|
|
|
|
public function hasParent(): bool
|
|
{
|
|
return $this->parent !== null;
|
|
}
|
|
|
|
public function setParent(?self $parent): self
|
|
{
|
|
// cache the old result for changing it during validaiton
|
|
$this->oldParent = $this->parent;
|
|
$this->parent = $parent;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @return Collection|self[]
|
|
*/
|
|
public function getChildren(): Collection
|
|
{
|
|
return $this->children;
|
|
}
|
|
|
|
public function addChild(self $child): self
|
|
{
|
|
if (!$this->children->contains($child)) {
|
|
$this->children[] = $child;
|
|
$child->setParent($this);
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function removeChild(self $child): self
|
|
{
|
|
if ($this->children->removeElement($child)) {
|
|
// set the owning side to null (unless already changed)
|
|
if ($child->getParent() === $this) {
|
|
$child->setParent(null);
|
|
}
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getOrdering(): float
|
|
{
|
|
return $this->ordering;
|
|
}
|
|
|
|
public function setOrdering(float $ordering): AsideActivityCategory
|
|
{
|
|
$this->ordering = $ordering;
|
|
return $this;
|
|
}
|
|
}
|