src/Entity/Menu.php line 16
<?phpnamespace App\Entity;use App\Repository\MenuRepository;use App\Trait\ActivableTrait;use App\Trait\DateTrait;use App\Trait\DeletableTrait;use DateTimeImmutable;use Doctrine\Common\Collections\ArrayCollection;use Doctrine\Common\Collections\Collection;use Doctrine\DBAL\Types\Types;use Doctrine\ORM\Mapping as ORM;#[ORM\Entity(repositoryClass: MenuRepository::class)]class Menu{use ActivableTrait;use DateTrait;use DeletableTrait;#[ORM\Id]#[ORM\GeneratedValue]#[ORM\Column]private ?int $id = null;#[ORM\Column(length: 255)]private ?string $name = null;#[ORM\Column(length: 255, nullable: true)]private ?string $icon = null;#[ORM\Column(length: 255, nullable: true)]private ?string $path = null;#[ORM\Column(type: Types::JSON)]private array $permissions = [];#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'submenus')]private ?self $parent = null;#[ORM\OneToMany(mappedBy: 'parent', targetEntity: self::class, cascade: ['all'])]private Collection $submenus;#[ORM\ManyToOne]#[ORM\JoinColumn(nullable: true)]private ?ModelMenu $modelMenu = null;#[ORM\ManyToOne(inversedBy: 'menus')]#[ORM\JoinColumn(nullable: false)]private ?Establishment $establishment = null;public function __construct(){$this->isActive = true;if (is_null($this->createdAt)) $this->createdAt = new DateTimeImmutable();$this->updatedAt = new DateTimeImmutable();$this->submenus = new ArrayCollection();}public function initialize(ModelMenu $modelMenu, Establishment $establishment): self{$this->setName($modelMenu->getName());$this->setIcon($modelMenu->getIcon());$this->setPath($modelMenu->getPath());$this->setPermissions($modelMenu->getPermissions());$this->setParent($modelMenu->getParent());$this->setModelMenu($modelMenu);$this->setEstablishment($establishment);foreach ($modelMenu->getModelSubmenus() as $modelSubmenu) {$subMenu = $this->getSubmenus()->filter(fn(Menu $s) => $s->getModelMenu() === $modelSubmenu)->first();if (!$subMenu)$subMenu = new Menu();$subMenu->setName($modelSubmenu->getName());$subMenu->setIcon($modelSubmenu->getIcon());$subMenu->setPath($modelSubmenu->getPath());$subMenu->setPermissions($modelSubmenu->getPermissions());$subMenu->setModelMenu($modelSubmenu);$subMenu->setEstablishment($establishment);if (is_null($subMenu->getId()))$this->addSubmenu($subMenu);}return $this;}public function getId(): ?int{return $this->id;}public function getName(): ?string{return $this->name;}public function setName(string $name): self{$this->name = $name;return $this;}public function getIcon(): ?string{return $this->icon;}public function setIcon(?string $icon): self{$this->icon = $icon;return $this;}public function getPath(): ?string{return $this->path;}public function setPath(?string $path): self{$this->path = $path;return $this;}public function getPermissions(): array{return $this->permissions;}public function setPermissions(array $permissions): self{$this->permissions = $permissions;return $this;}public function getParent(): ?self{return $this->parent;}public function setParent(?self $parent): self{$this->parent = $parent;return $this;}/*** @return Collection<int, self>*/public function getSubmenus(): Collection{return $this->submenus;}public function addSubmenu(self $submenu): self{if (!$this->submenus->contains($submenu)) {$this->submenus->add($submenu);$submenu->setParent($this);}return $this;}public function removeSubmenu(self $submenu): self{if ($this->submenus->removeElement($submenu)) {// set the owning side to null (unless already changed)if ($submenu->getParent() === $this) {$submenu->setParent(null);}}return $this;}public function getModelMenu(): ?ModelMenu{return $this->modelMenu;}public function setModelMenu(?ModelMenu $modelMenu): self{$this->modelMenu = $modelMenu;return $this;}public function getEstablishment(): ?Establishment{return $this->establishment;}public function setEstablishment(?Establishment $establishment): self{$this->establishment = $establishment;return $this;}public function __toString(): string{return $this->name;}}