src/Entity/Product.php line 20

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Repository\ProductRepository;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\Common\Collections\Collection;
  6. use Doctrine\ORM\Mapping as ORM;
  7. use Gedmo\Mapping\Annotation as Gedmo;
  8. use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface;
  9. use Knp\DoctrineBehaviors\Model\Translatable\TranslatableTrait;
  10. use Symfony\Component\HttpFoundation\File\File;
  11. use Vich\UploaderBundle\Mapping\Annotation as Vich;
  12. use Symfony\Component\Validator\Constraints as Assert;
  13. /**
  14.  * @Vich\Uploadable
  15.  * @ORM\Entity(repositoryClass=ProductRepository::class)
  16.  */
  17. class Product implements TranslatableInterface
  18. {
  19.     use TranslatableTrait;
  20.     public function __call($method$arguments)
  21.     {
  22.         return $this->proxyCurrentLocaleTranslation($method$arguments);
  23.     }
  24.     public function __get($name)
  25.     {
  26.         $method 'get' ucfirst($name);
  27.         $arguments = [];
  28.         return $this->proxyCurrentLocaleTranslation($method$arguments);
  29.     }
  30.     public function __toString()
  31.     {
  32.         return "#" $this->id " " $this->getTitle();
  33.     }
  34.     /**
  35.      * @ORM\OneToMany(targetEntity=ApplicationProduct::class, mappedBy="product")
  36.      */
  37.     private $applicationProducts;
  38.     /**
  39.      * @ORM\OneToMany(targetEntity=RelatedProduct::class, mappedBy="product",cascade={"persist"})
  40.      */
  41.     private $relatedProducts;
  42.     /**
  43.      * @ORM\OneToMany(targetEntity=RelatedProduct::class, mappedBy="targetProduct",cascade={"persist"})
  44.      */
  45.     private $relatedTargetProducts;
  46.     public function __construct()
  47.     {
  48.         $this->applicationProducts = new ArrayCollection();
  49.         $this->relatedProducts = new ArrayCollection();
  50.         $this->relatedTargetProducts = new ArrayCollection();
  51.         $this->productMedia = new ArrayCollection();
  52.     }
  53.     /**
  54.      * @ORM\Id
  55.      * @ORM\GeneratedValue
  56.      * @ORM\Column(type="integer")
  57.      */
  58.     private $id;
  59.     /**
  60.      * @Gedmo\SortablePosition()
  61.      * @ORM\Column(type="integer", nullable=true)
  62.      */
  63.     private $position;
  64.     /**
  65.      * @Gedmo\SortableGroup()
  66.      * @Assert\NotBlank()
  67.      * @ORM\ManyToOne(targetEntity=Category::class, inversedBy="products")
  68.      */
  69.     private $category;
  70.     /**
  71.      * NOTE: This is not a mapped field of entity metadata, just a simple property.
  72.      * @Vich\UploadableField(mapping="product", fileNameProperty="productFileName", size="productFileSize")
  73.      * @Assert\Expression("this.getProductFile() or this.getProductFileName()", message = "Veuillez sélectionner un fichier")
  74.      * @Assert\File(
  75.      *     maxSize = "1200k"
  76.      * )
  77.      *
  78.      * @var File
  79.      */
  80.     private $productFile;
  81.     /**
  82.      * @ORM\Column(type="string", length=255, nullable=true)
  83.      *
  84.      * @var string
  85.      */
  86.     private $productFileName;
  87.     /**
  88.      * @ORM\Column(type="integer", nullable=true)
  89.      *
  90.      * @var integer
  91.      */
  92.     private $productFileSize;
  93.     /**
  94.      * @ORM\Column(type="datetime", nullable=true)
  95.      *
  96.      * @var \DateTime
  97.      */
  98.     private $productFileUpdatedAt;
  99.     /**
  100.      * @Assert\NotBlank()
  101.      * @ORM\ManyToOne(targetEntity=SubCategory::class, inversedBy="products")
  102.      */
  103.     private $subCategory;
  104.     /**
  105.      * @ORM\Column(type="boolean")
  106.      */
  107.     private $hide false;
  108.     /**
  109.      * @ORM\OneToMany(targetEntity=ProductMedia::class, mappedBy="product", cascade={"remove"})
  110.      */
  111.     private $productMedia;
  112.     /**
  113.      * If manually uploading a file (i.e. not using Symfony Form) ensure an instance
  114.      * of 'UploadedFile' is injected into this setter to trigger the  update. If this
  115.      * bundle's configuration parameter 'inject_on_load' is set to 'true' this setter
  116.      * must be able to accept an instance of 'File' as the bundle will inject one here
  117.      * during Doctrine hydration.
  118.      *
  119.      * @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $image
  120.      */
  121.     public function setProductFile(File $image null)
  122.     {
  123.         $this->productFile $image;
  124.         if (null !== $image) {
  125.             // It is required that at least one field changes if you are using doctrine
  126.             // otherwise the event listeners won't be called and the file is lost
  127.             $this->productFileUpdatedAt = new \DateTimeImmutable();
  128.         }
  129.     }
  130.     public function getProductFile()
  131.     {
  132.         return $this->productFile;
  133.     }
  134.     public function getProductFileName(): ?string
  135.     {
  136.         return $this->productFileName;
  137.     }
  138.     public function setProductFileName(?string $productFileName): self
  139.     {
  140.         $this->productFileName $productFileName;
  141.         return $this;
  142.     }
  143.     public function getProductFileSize(): ?int
  144.     {
  145.         return $this->productFileSize;
  146.     }
  147.     public function setProductFileSize(?int $productFileSize): self
  148.     {
  149.         $this->productFileSize $productFileSize;
  150.         return $this;
  151.     }
  152.     public function getProductFileUpdatedAt(): ?\DateTimeInterface
  153.     {
  154.         return $this->productFileUpdatedAt;
  155.     }
  156.     public function setProductFileUpdatedAt(?\DateTimeInterface $productFileUpdatedAt): self
  157.     {
  158.         $this->productFileUpdatedAt $productFileUpdatedAt;
  159.         return $this;
  160.     }
  161.     public function getId(): ?int
  162.     {
  163.         return $this->id;
  164.     }
  165.     public function getPosition(): ?int
  166.     {
  167.         return $this->position;
  168.     }
  169.     public function setPosition(?int $position): self
  170.     {
  171.         $this->position $position;
  172.         return $this;
  173.     }
  174.     public function getCategory(): ?Category
  175.     {
  176.         return $this->category;
  177.     }
  178.     public function setCategory(?Category $category): self
  179.     {
  180.         $this->category $category;
  181.         return $this;
  182.     }
  183.     public function getSubCategory(): ?SubCategory
  184.     {
  185.         return $this->subCategory;
  186.     }
  187.     public function setSubCategory(?SubCategory $subCategory): self
  188.     {
  189.         $this->subCategory $subCategory;
  190.         return $this;
  191.     }
  192.     /**
  193.      * @return Collection<int, ApplicationProduct>
  194.      */
  195.     public function getApplicationProducts(): Collection
  196.     {
  197.         return $this->applicationProducts;
  198.     }
  199.     public function addApplicationProduct(ApplicationProduct $applicationProduct): self
  200.     {
  201.         if (!$this->applicationProducts->contains($applicationProduct)) {
  202.             $this->applicationProducts[] = $applicationProduct;
  203.             $applicationProduct->setProduct($this);
  204.         }
  205.         return $this;
  206.     }
  207.     public function removeApplicationProduct(ApplicationProduct $applicationProduct): self
  208.     {
  209.         if ($this->applicationProducts->removeElement($applicationProduct)) {
  210.             // set the owning side to null (unless already changed)
  211.             if ($applicationProduct->getProduct() === $this) {
  212.                 $applicationProduct->setProduct(null);
  213.             }
  214.         }
  215.         return $this;
  216.     }
  217.     /**
  218.      * @return Collection<int, RelatedProduct>
  219.      */
  220.     public function getRelatedProducts(): Collection
  221.     {
  222.         return $this->relatedProducts;
  223.     }
  224.     public function addRelatedProduct(RelatedProduct $relatedProduct): self
  225.     {
  226.         if (!$this->relatedProducts->contains($relatedProduct)) {
  227.             $this->relatedProducts[] = $relatedProduct;
  228.             $relatedProduct->setProduct($this);
  229.         }
  230.         return $this;
  231.     }
  232.     public function removeRelatedProduct(RelatedProduct $relatedProduct): self
  233.     {
  234.         if ($this->relatedProducts->removeElement($relatedProduct)) {
  235.             // set the owning side to null (unless already changed)
  236.             if ($relatedProduct->getProduct() === $this) {
  237.                 $relatedProduct->setProduct(null);
  238.             }
  239.         }
  240.         return $this;
  241.     }
  242.     public function removeAllRelatedProduct(): self
  243.     {
  244.         foreach ($this->relatedProducts as $relatedProduct) {
  245.             if ($this->relatedProducts->removeElement($relatedProduct)) {
  246.                 // set the owning side to null (unless already changed)
  247.                 if ($relatedProduct->getProduct() === $this) {
  248.                     $relatedProduct->setProduct(null);
  249.                 }
  250.             }
  251.         }
  252.         return $this;
  253.     }
  254.     public function removeAllRelatedTargetProduct(): self
  255.     {
  256.         foreach ($this->relatedTargetProducts as $relatedTargetProduct) {
  257.             if ($this->relatedTargetProducts->removeElement($relatedTargetProduct)) {
  258.                 // set the owning side to null (unless already changed)
  259.                 if ($relatedTargetProduct->getTargetProduct() === $this) {
  260.                     $relatedTargetProduct->setTargetProduct(null);
  261.                 }
  262.             }
  263.         }
  264.         return $this;
  265.     }
  266.     /**
  267.      * @return Collection<int, RelatedProduct>
  268.      */
  269.     public function getRelatedTargetProducts(): Collection
  270.     {
  271.         return $this->relatedTargetProducts;
  272.     }
  273.     public function addRelatedTargetProduct(RelatedProduct $relatedTargetProduct): self
  274.     {
  275.         if (!$this->relatedTargetProducts->contains($relatedTargetProduct)) {
  276.             $this->relatedTargetProducts[] = $relatedTargetProduct;
  277.             $relatedTargetProduct->setTargetProduct($this);
  278.         }
  279.         return $this;
  280.     }
  281.     public function removeRelatedTargetProduct(RelatedProduct $relatedTargetProduct): self
  282.     {
  283.         if ($this->relatedTargetProducts->removeElement($relatedTargetProduct)) {
  284.             // set the owning side to null (unless already changed)
  285.             if ($relatedTargetProduct->getTargetProduct() === $this) {
  286.                 $relatedTargetProduct->setTargetProduct(null);
  287.             }
  288.         }
  289.         return $this;
  290.     }
  291.     public function getHide(): ?bool
  292.     {
  293.         return $this->hide;
  294.     }
  295.     public function setHide(bool $hide): self
  296.     {
  297.         $this->hide $hide;
  298.         return $this;
  299.     }
  300.     /**
  301.      * @return Collection<int, ProductMedia>
  302.      */
  303.     public function getProductMedia(): Collection
  304.     {
  305.         return $this->productMedia;
  306.     }
  307.     public function addProductMedium(ProductMedia $productMedium): self
  308.     {
  309.         if (!$this->productMedia->contains($productMedium)) {
  310.             $this->productMedia[] = $productMedium;
  311.             $productMedium->setProduct($this);
  312.         }
  313.         return $this;
  314.     }
  315.     public function removeProductMedium(ProductMedia $productMedium): self
  316.     {
  317.         if ($this->productMedia->removeElement($productMedium)) {
  318.             // set the owning side to null (unless already changed)
  319.             if ($productMedium->getProduct() === $this) {
  320.                 $productMedium->setProduct(null);
  321.             }
  322.         }
  323.         return $this;
  324.     }
  325. }