vendor/bluue/categories-bundle/src/Entity/Category.php line 42

Open in your IDE?
  1. <?php
  2. /**
  3.  * @author Leo BANNHOLTZER (contact@scaledev.fr)
  4.  * @copyright 2021 - ScaleDEV SAS, 12 RUE CHARLES MORET, 10120 ST ANDRE LES VERGERS
  5.  * @license commercial
  6.  */
  7. declare(strict_types=1);
  8. namespace Bluue\CategoriesBundle\Entity;
  9. use App\Entity\Context;
  10. use Symfony\Component\Uid\Uuid;
  11. use Doctrine\ORM\Mapping as ORM;
  12. use Gedmo\Mapping\Annotation as Gedmo;
  13. use App\DoctrineExtensions\IsActiveEntity;
  14. use Doctrine\Common\Collections\Collection;
  15. use App\DoctrineExtensions\GedmoTree\TreeEntity;
  16. use Doctrine\Common\Collections\ArrayCollection;
  17. use Bluue\CategoriesBundle\Entity\CategoryContext;
  18. use Bluue\CategoriesBundle\Entity\CategoryProduct;
  19. use Symfony\Bridge\Doctrine\IdGenerator\UuidGenerator;
  20. use Bluue\CategoriesBundle\Repository\CategoryRepository;
  21. use App\DoctrineExtensions\Timestampable\Traits\UserTimestampableEntity;
  22. use App\DoctrineExtensions\SoftDeleteable\Traits\UserSoftDeleteableEntity;
  23. /**
  24.  * @ORM\Entity(repositoryClass=CategoryRepository::class)
  25.  * @ORM\Table(name="categories_bundle__category", indexes={
  26.  *  @ORM\Index(name="name", columns={"name"}),
  27.  *  @ORM\Index(name="reference", columns={"reference"}),
  28.  *  @ORM\Index(name="is_active", columns={"is_active"}),
  29.  *  @ORM\Index(name="deleted_at", columns={"deleted_at"}),
  30.  *  @ORM\Index(name="created_at", columns={"created_at"}),
  31.  *  @ORM\Index(name="updated_at", columns={"updated_at"})
  32.  * })
  33.  * @Gedmo\TranslationEntity(class="Bluue\CategoriesBundle\Entity\CategoryTranslation")
  34.  * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false, hardDelete=false)
  35.  * @Gedmo\Tree(type="nested")
  36.  */
  37. class Category
  38. {
  39.     use TreeEntity;
  40.     use UserTimestampableEntity;
  41.     use UserSoftDeleteableEntity;
  42.     use IsActiveEntity;
  43.     /**
  44.      * @ORM\Id
  45.      * @ORM\Column(type="uuid")
  46.      * @ORM\GeneratedValue(strategy="CUSTOM")
  47.      * @ORM\CustomIdGenerator(class=UuidGenerator::class)
  48.      */
  49.     private ?Uuid $id null;
  50.     /**
  51.      * @Gedmo\Translatable
  52.      * @ORM\Column(type="string", length=128)
  53.      */
  54.     private string $name;
  55.     /**
  56.      * @ORM\Column(type="string", length=128, nullable=true)
  57.      */
  58.     private ?string $reference null;
  59.     /**
  60.      * @Gedmo\Translatable
  61.      * @ORM\Column(type="text", nullable=true)
  62.      */
  63.     private ?string $description;
  64.     /**
  65.      * @Gedmo\TreeParent()
  66.      * @ORM\ManyToOne(targetEntity=Category::class, inversedBy="childCategories")
  67.      */
  68.     private ?Category $parent null;
  69.     /**
  70.      * @ORM\OneToMany(targetEntity=Category::class, mappedBy="parent", fetch="EXTRA_LAZY")
  71.      * @ORM\OrderBy({"left" = "ASC"})
  72.      */
  73.     private Collection $childCategories;
  74.     /**
  75.      * @ORM\OneToMany(
  76.      *   targetEntity="CategoryTranslation",
  77.      *   mappedBy="object",
  78.      *   cascade={"persist", "remove"},
  79.      *   fetch="EXTRA_LAZY"
  80.      * )
  81.      */
  82.     private Collection $translations;
  83.     /**
  84.      * @ORM\OneToMany(targetEntity=CategoryProduct::class, mappedBy="category", fetch="EXTRA_LAZY")
  85.      */
  86.     private Collection $categoryProducts;
  87.     /**
  88.      * @ORM\OneToMany(targetEntity=CategoryContext::class, mappedBy="category", fetch="EXTRA_LAZY")
  89.      */
  90.     private Collection $categoryContexts;
  91.     public function __construct()
  92.     {
  93.         $this->translations = new ArrayCollection();
  94.         $this->categoryProducts = new ArrayCollection();
  95.         $this->childCategories = new ArrayCollection();
  96.         $this->categoryContexts = new ArrayCollection();
  97.     }
  98.     /**
  99.      * @return Uuid|null
  100.      */
  101.     public function getId(): ?Uuid
  102.     {
  103.         return $this->id;
  104.     }
  105.     /**
  106.      * @return string
  107.      */
  108.     public function getName(): string
  109.     {
  110.         return $this->name;
  111.     }
  112.     /**
  113.      * @param string $name
  114.      * @return $this
  115.      */
  116.     public function setName(string $name): self
  117.     {
  118.         $this->name $name;
  119.         return $this;
  120.     }
  121.     /**
  122.      * @return string|null
  123.      */
  124.     public function getReference(): ?string
  125.     {
  126.         return $this->reference;
  127.     }
  128.     /**
  129.      * @param string|null $reference
  130.      * @return Category
  131.      */
  132.     public function setReference(?string $reference): Category
  133.     {
  134.         $this->reference $reference;
  135.         return $this;
  136.     }
  137.     /**
  138.      * @return string|null
  139.      */
  140.     public function getDescription(): ?string
  141.     {
  142.         return $this->description;
  143.     }
  144.     /**
  145.      * @param string|null $description
  146.      * @return $this
  147.      */
  148.     public function setDescription(?string $description): self
  149.     {
  150.         $this->description $description;
  151.         return $this;
  152.     }
  153.     /**
  154.      * @return self|null
  155.      */
  156.     public function getParent(): ?self
  157.     {
  158.         return $this->parent;
  159.     }
  160.     /**
  161.      * @param self|null $parent
  162.      * @return $this
  163.      */
  164.     public function setParent(?self $parent): self
  165.     {
  166.         $this->parent $parent;
  167.         return $this;
  168.     }
  169.     /**
  170.      * @param Context|null $context
  171.      * @return Collection|self[]
  172.      */
  173.     public function getChildCategories(?Context $context null): Collection
  174.     {
  175.         if ($context) {
  176.             return $this->childCategories->filter(function (Category $c) use ($context) {
  177.                 return $c->getCategoryContexts()->exists(function ($keyCategoryContext $cc) use ($context) {
  178.                     return $cc->getContext() === $context;
  179.                 });
  180.             });
  181.         }
  182.         return $this->childCategories;
  183.     }
  184.     /**
  185.      * @return Collection|CategoryTranslation[]
  186.      */
  187.     public function getTranslations()
  188.     {
  189.         return $this->translations;
  190.     }
  191.     /**
  192.      * @param CategoryTranslation $t
  193.      * @return $this
  194.      */
  195.     public function addTranslation(CategoryTranslation $t): self
  196.     {
  197.         if (!$this->translations->contains($t)) {
  198.             $this->translations[] = $t;
  199.             $t->setObject($this);
  200.         }
  201.         return $this;
  202.     }
  203.     /**
  204.      * @return Collection|CategoryProduct[]
  205.      */
  206.     public function getCategoryProducts(): Collection
  207.     {
  208.         return $this->categoryProducts;
  209.     }
  210.     /**
  211.      * @param CategoryProduct $categoryProduct
  212.      * @return $this
  213.      */
  214.     public function addCategoryProduct(CategoryProduct $categoryProduct): self
  215.     {
  216.         if (!$this->categoryProducts->contains($categoryProduct)) {
  217.             $this->categoryProducts[] = $categoryProduct;
  218.             $categoryProduct->setCategory($this);
  219.         }
  220.         return $this;
  221.     }
  222.     /**
  223.      * @param CategoryProduct $categoryProduct
  224.      * @return $this
  225.      */
  226.     public function removeCategoryProduct(CategoryProduct $categoryProduct): self
  227.     {
  228.         if ($this->categoryProducts->removeElement($categoryProduct)) {
  229.             if ($categoryProduct->getCategory() === $this) {
  230.                 $categoryProduct->setCategory(null);
  231.             }
  232.         }
  233.         return $this;
  234.     }
  235.     /**
  236.      * @return Collection|CategoryContext[]
  237.      */
  238.     public function getCategoryContexts(): Collection
  239.     {
  240.         return $this->categoryContexts;
  241.     }
  242.     /**
  243.      * @param Context $context
  244.      * @return CategoryContext|null
  245.      */
  246.     public function getCategoryContext(Context $context): ?CategoryContext
  247.     {
  248.         $value null;
  249.         if ($this->getId()) {
  250.             foreach ($this->getCategoryContexts() as $cc) {
  251.                 if ($cc->getContext() == $context) {
  252.                     $value $cc;
  253.                 }
  254.             }
  255.         }
  256.         return $value;
  257.     }
  258.     /**
  259.      * @param CategoryContext $categoryContext
  260.      * @return $this
  261.      */
  262.     public function addCategoryContext(CategoryContext $categoryContext): self
  263.     {
  264.         if (!$this->categoryContexts->contains($categoryContext)) {
  265.             $this->categoryContexts[] = $categoryContext;
  266.             $categoryContext->setCategory($this);
  267.         }
  268.         return $this;
  269.     }
  270.     /**
  271.      * @param CategoryContext $categoryContext
  272.      * @return $this
  273.      */
  274.     public function removeCategoryContext(CategoryContext $categoryContext): self
  275.     {
  276.         if ($this->categoryContexts->removeElement($categoryContext)) {
  277.             if ($categoryContext->getCategory() === $this) {
  278.                 $categoryContext->setCategory(null);
  279.             }
  280.         }
  281.         return $this;
  282.     }
  283.     /**
  284.      * @return string
  285.      */
  286.     public function getChoiceLabel(): string
  287.     {
  288.         // ne pas afficher la catégorie par défaut
  289.         $path '';
  290.         $parent $this->getParent();
  291.         while ($parent) {
  292.             $path $parent->getName() . ' > ' $path;
  293.             $parent $parent->getParent();
  294.         }
  295.         return $path $this->getName();
  296.     }
  297. }