<?php
namespace App\Entity\PointsCatalog;
use App\Annotation\SiteAware;
use App\Entity\AbstractBase;
use App\Entity\Interfaces\SiteInterface;
use App\Entity\MiniAbstractBase;
use App\Entity\Traits\NameTrait;
use App\Entity\Traits\PositionTrait;
use App\Entity\Traits\PublishedTrait;
use App\Entity\Traits\SiteTrait;
use App\Entity\User;
use App\Entity\UserGroup;
use App\Persistence\Model\UserGroupAccessType;
use App\Repository\PointsCatalog\CatalogGiftCategoryRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Table(name="vulco_points_catalog_gift_category", indexes={@ORM\Index(name="catalog_gift_category_site_idx", columns={"site"})})
* @ORM\Entity(repositoryClass=CatalogGiftCategoryRepository::class)
* @Gedmo\SoftDeleteable(fieldName="removedAt", timeAware=false)
* @SiteAware(siteFieldName="site")
*/
class CatalogGiftCategory extends AbstractBase implements SiteInterface
{
use NameTrait;
use PositionTrait;
use PublishedTrait;
use SiteTrait;
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank()
*/
private string $name;
/**
* @ORM\Column(type="integer")
* @Assert\NotBlank()
*/
private int $position;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private ?bool $vulcoClub = null;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\UserGroup", inversedBy="catalogGiftCategories")
* @ORM\JoinTable(name="vulco_points_catalog_gift_categories_user_groups",
* joinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="user_group_id", referencedColumnName="id")}
* )
*/
private ?Collection $userGroups;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\User")
* @ORM\JoinTable(name="vulco_points_catalog_gift_categories_users",
* joinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
* )
*/
private ?Collection $users;
/**
* @ORM\Column(type="user_group_access_type", nullable=false, options={"ignore"})
*/
private UserGroupAccessType $userGroupAccessType;
/**
* @ORM\Column(type="user_group_access_type", nullable=false, options={"ignore"})
*/
private UserGroupAccessType $userAccessType;
public function __construct()
{
$this->userGroups = new ArrayCollection();
$this->users = new ArrayCollection();
$this->userGroupAccessType = new UserGroupAccessType(UserGroupAccessType::getDefaultCode());
$this->userAccessType = new UserGroupAccessType(UserGroupAccessType::getDefaultCode());
}
public function isVulcoClub(): ?bool
{
return $this->vulcoClub;
}
public function getVulcoClub(): ?bool
{
return $this->isVulcoClub();
}
public function setVulcoClub(?bool $vulcoClub): self
{
$this->vulcoClub = $vulcoClub;
return $this;
}
public function getUserGroups(): ?Collection
{
return $this->userGroups;
}
public function setUserGroups(?Collection $userGroups): self
{
$this->userGroups = $userGroups;
return $this;
}
public function addUserGroup(UserGroup $userGroup): self
{
if (!$this->userGroups->contains($userGroup)) {
$this->userGroups->add($userGroup);
$userGroup->addCatalogGiftCategory($this);
}
return $this;
}
public function removeUserGroup(UserGroup $userGroup): self
{
if ($this->userGroups->contains($userGroup)) {
$this->userGroups->removeElement($userGroup);
}
return $this;
}
public function getUsers(): ?Collection
{
return $this->users;
}
public function setUsers(?Collection $users): self
{
$this->users = $users;
return $this;
}
public function addUser(User $user): self
{
if (!$this->users->contains($user)) {
$this->users->add($user);
}
return $this;
}
public function removeUser(User $user): self
{
if ($this->users->contains($user)) {
$this->users->removeElement($user);
}
return $this;
}
public function getUserGroupAccessType(): UserGroupAccessType
{
return $this->userGroupAccessType;
}
public function setUserGroupAccessType(UserGroupAccessType $userGroupAccessType): self
{
$this->userGroupAccessType = $userGroupAccessType;
return $this;
}
public function getUserAccessType(): UserGroupAccessType
{
return $this->userAccessType;
}
public function setUserAccessType(UserGroupAccessType $userAccessType): self
{
$this->userAccessType = $userAccessType;
return $this;
}
public function __toString(): string
{
return $this->name ? $this->getName() : MiniAbstractBase::DEFAULT_EMPTY_STRING;
}
}