<?phpnamespace App\Entity;use App\Entity\Common\LibraryVoterInterface;use App\Entity\Common\ResourceFolderInterface;use App\Entity\Traits\FolderTrait;use App\Repository\PersonalFolderRepository;use App\Security\Voter\Library\PersonalLibraryVoter;use Doctrine\Common\Collections\ArrayCollection;use Doctrine\Common\Collections\Collection;use Doctrine\ORM\Mapping as ORM;#[ORM\Entity(repositoryClass: PersonalFolderRepository::class)]#[ORM\HasLifecycleCallbacks]class PersonalFolder implements LibraryVoterInterface, ResourceFolderInterface{ use FolderTrait; #[ORM\OneToMany(targetEntity: PersonalResource::class, mappedBy: 'personalFolder')] private $personalResources; #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'personalFolders')] private $user; #[ORM\OneToMany(targetEntity: PersonalFolder::class, mappedBy: 'parent')] protected $children; #[ORM\ManyToOne(targetEntity: PersonalFolder::class, inversedBy: 'children')] #[ORM\JoinColumn(name: 'parent', referencedColumnName: 'id', onDelete: 'CASCADE')] private $parent; public function __construct() { $this->personalResources = new ArrayCollection(); $this->children = new ArrayCollection(); } /** * @return Collection|PersonalResource[] */ public function getPersonalResources(): Collection { return $this->personalResources; } public function addPersonalResource(PersonalResource $personalResource): self { if (!$this->personalResources->contains($personalResource)) { $this->personalResources[] = $personalResource; $personalResource->setPersonalFolder($this); } return $this; } public function removePersonalResource(PersonalResource $personalResource): self { if ($this->personalResources->removeElement($personalResource)) { // set the owning side to null (unless already changed) if ($personalResource->getPersonalFolder() === $this) { $personalResource->setPersonalFolder(null); } } return $this; } public function getUser(): ?User { return $this->user; } public function setUser(?User $user): self { $this->user = $user; return $this; } /** * {@inheritdoc} */ public function getLibraryVoter(): string { return PersonalLibraryVoter::class; } /** * {@inheritdoc} */ public function getResources(): ?array { return $this->personalResources->toArray(); } public function getParent(): ?self { return $this->parent; } public function setParent(?self $parent): self { $this->parent = $parent; return $this; } public function getChildren(): Collection { return $this->children; } public function hasChildren(): bool { return count($this->children) > 0 ? true : false; }}