<?php
declare(strict_types=1);
namespace App\Entity\Configurator;
use App\Entity\Product\ProductVariant;
use App\Model\ElementType;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Sylius\Component\Resource\Model\CodeAwareInterface;
use Sylius\Component\Resource\Model\ResourceInterface;
/**
* @ORM\Entity
* @ORM\Table(name="app_configurator_model")
*/
class Model implements ResourceInterface, CodeAwareInterface
{
const WIDTH_MAX = 3200;
const HEIGHT_MAX = 3200;
const PRINT_FORMAT_PNG = "png";
const PRINT_FORMAT_JPG = "jpg";
const PRINT_FORMAT_PDF = "pdf";
const TYPE_TEXT = ElementType::TYPE_TEXT;
const TYPE_IMAGE_LIBRARY = ElementType::TYPE_IMAGE_LIBRARY;
const TYPE_IMAGE_UPLOAD = ElementType::TYPE_IMAGE_UPLOAD;
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private ?int $id = null;
/**
* @ORM\Column(type="string", length=70)
*/
private ?string $code = null;
/**
* @ORM\Column(type="string")
*/
private ?string $name = null;
/**
* largeur contexte
* @ORM\Column(type="float", options={"default" : 800})
*/
private ?float $width = 800;
/**
* hauteur contexte
* @ORM\Column(type="float", options={"default" : 800})
*/
private ?float $height = 800;
/**
* print zone width (px)
* @ORM\Column(name="print_zone_width_px", type="float", options={"default" : 253})
*/
private float $printZoneWidthPx = 253;
/**
* print zone height (px)
* @ORM\Column(name="print_zone_height_px", type="float", options={"default" : 350})
*/
private float $printZoneHeightPx = 350;
/**
* @ORM\Column(type="integer", nullable=false, name="print_zone_coordinates_x", options={"default" : 0})
*/
private int $printZoneCoordinatesX = 0;
/**
* @ORM\Column(type="integer", nullable=false, name="print_zone_coordinates_y", options={"default" : 0})
*/
private int $printZoneCoordinatesY = 0;
/**
* @ORM\Column(type="string", nullable=false, name="print_format")
*/
private string $printFormat;
/**
* scale between real sizes and rendering sizes
* @ORM\Column(type="float", nullable=true)
*/
private ?float $scale;
/**
* @ORM\OneToMany(targetEntity=Element::class, mappedBy="model", orphanRemoval=true, cascade={"persist"})
*/
private Collection $elements;
/**
* @ORM\Column(name="watermark_on_cart_rendering", type="boolean", nullable=true, options={"default" : 1})
*/
private ?bool $watermarkOnCartRendering = true;
/**
* 0 => configurateur simple / 1 => configurateur complexe
* @ORM\Column(type="boolean", nullable=true, options={"default" : 1})
*/
private ?bool $advanced = true;
/**
* 0 => configurateur standard / 1 => configurateur libre
* @ORM\Column(name="free_configuration", type="boolean", nullable=true, options={"default" : 0})
*/
private ?bool $freeConfiguration = false;
/**
* @ORM\OneToOne(targetEntity=ProductVariant::class, mappedBy="model", cascade={"persist"})
* @ORM\JoinColumn(nullable=true, onDelete="SET NULL", name="product_variant_id")
*/
private ?ProductVariant $productVariant = null;
/**
* @ORM\Column(type="string", nullable=true)
*/
private ?string $token = null;
// FREE CONFIGURATOR
/**
* 0 => pas de personnalisation du texte possible / 1 => afficher les outils de personnalisation du texte (stroke, shadow, bold, italic...)
* @ORM\Column(name="text_personalisation", type="boolean", nullable=true, options={"default" : 1})
*/
private ?bool $textPersonalisation = true;
/**
* @ORM\Column(type="array", nullable=true)
*/
private ?array $type;
/**
* @ORM\ManyToMany(targetEntity=Font::class, mappedBy="models")
* @ORM\JoinTable(
* name="app_configurator_model_font",
* joinColumns={@ORM\JoinColumn(name="model_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="font_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")}
* )
*/
private Collection $fonts;
/**
* @ORM\ManyToMany(targetEntity=FontColor::class, mappedBy="models")
* @ORM\JoinTable(
* name="app_configurator_model_font_color",
* joinColumns={@ORM\JoinColumn(name="model_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="font_color_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")}
* )
*/
private Collection $fontColors;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Configurator\FontColor")
* @ORM\JoinTable(
* name="app_configurator_model_stroke_color",
* joinColumns={@ORM\JoinColumn(name="model_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="font_color_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")}
* )
*/
private $strokeColors;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Configurator\FontColor")
* @ORM\JoinTable(
* name="app_configurator_model_shadow_color",
* joinColumns={@ORM\JoinColumn(name="model_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="font_color_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")}
* )
*/
private $shadowColors;
/**
* @ORM\ManyToOne(targetEntity=Font::class)
* @ORM\JoinColumn(nullable=true, name="default_font_id")
*/
private ?Font $defaultFont;
/**
* @ORM\ManyToOne(targetEntity=FontColor::class)
* @ORM\JoinColumn(nullable=true, name="default_font_color_id")
*/
private ?FontColor $defaultFontColor;
/**
* @ORM\ManyToOne(targetEntity=FontColor::class)
* @ORM\JoinColumn(nullable=true, name="default_stroke_color_id")
*/
private ?FontColor $defaultStrokeColor;
/**
* @ORM\ManyToOne(targetEntity=FontColor::class)
* @ORM\JoinColumn(nullable=true, name="default_shadow_color_id")
*/
private ?FontColor $defaultShadowColor;
/**
* @ORM\ManyToMany(targetEntity=Library::class)
* @ORM\JoinTable(
* name="app_configurator_model_library",
* joinColumns={@ORM\JoinColumn(name="model_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="library_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")}
* )
*/
private Collection $libraries;
// ----- END FREE CONFIGURATOR
public function __construct()
{
$this->elements = new ArrayCollection();
$this->fonts = new ArrayCollection();
$this->fontColors = new ArrayCollection();
$this->strokeColors = new ArrayCollection();
$this->shadowColors = new ArrayCollection();
$this->libraries = new ArrayCollection();
}
/**
* @return int|null
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @param int|null $id
*/
public function setId(?int $id): void
{
$this->id = $id;
}
/**
* @return string|null
*/
public function getName(): ?string
{
return $this->name;
}
/**
* @param string|null $name
*/
public function setName(?string $name): void
{
$this->name = $name;
}
/**
* @return float|null
*/
public function getWidth(): ?float
{
return $this->width;
}
/**
* @param float|null $width
*/
public function setWidth(?float $width): void
{
$this->width = $width;
}
/**
* @return float|null
*/
public function getHeight(): ?float
{
return $this->height;
}
/**
* @param float|null $height
*/
public function setHeight(?float $height): void
{
$this->height = $height;
}
/**
* @return Collection<int, Element>
*/
public function getElements(): Collection
{
return $this->elements;
}
public function addElement(Element $element): self
{
if (!$this->elements->contains($element)) {
$this->elements[] = $element;
$element->setModel($this);
}
return $this;
}
public function removeElement(Element $element): self
{
$this->elements->removeElement($element);
return $this;
}
public function getProductVariant(): ?ProductVariant
{
return $this->productVariant;
}
/**
* @param ProductVariant|null $productVariant
*/
public function setProductVariant(?ProductVariant $productVariant): self
{
// unset the owning side of the relation if necessary
if ($productVariant === null && $this->productVariant !== null) {
$this->productVariant->setModel(null);
}
// set the owning side of the relation if necessary
if ($productVariant !== null && $productVariant->getModel() !== $this) {
$this->productVariant?->setModel(null);
$productVariant->setModel($this);
}
$this->productVariant = $productVariant;
return $this;
}
/**
* @return float
*/
public function getPrintZoneWidthPx(): float
{
return $this->printZoneWidthPx;
}
/**
* @param float $printZoneWidthPx
*/
public function setPrintZoneWidthPx(float $printZoneWidthPx): void
{
$this->printZoneWidthPx = $printZoneWidthPx;
}
/**
* @return float
*/
public function getPrintZoneHeightPx(): float
{
return $this->printZoneHeightPx;
}
/**
* @param float $printZoneHeightPx
*/
public function setPrintZoneHeightPx(float $printZoneHeightPx): void
{
$this->printZoneHeightPx = $printZoneHeightPx;
}
/**
* @return float|null
*/
public function getScale(): ?float
{
return $this->scale;
}
/**
* @param null|float $scale
*/
public function setScale(?float $scale): void
{
$this->scale = $scale;
}
/**
* @return int
*/
public function getPrintZoneCoordinatesX(): int
{
return $this->printZoneCoordinatesX;
}
/**
* @param int $printZoneCoordinatesX
*/
public function setPrintZoneCoordinatesX(int $printZoneCoordinatesX): void
{
$this->printZoneCoordinatesX = $printZoneCoordinatesX;
}
/**
* @return int
*/
public function getPrintZoneCoordinatesY(): int
{
return $this->printZoneCoordinatesY;
}
/**
* @param int $printZoneCoordinatesY
*/
public function setPrintZoneCoordinatesY(int $printZoneCoordinatesY): void
{
$this->printZoneCoordinatesY = $printZoneCoordinatesY;
}
/**
* @return string
*/
public function getPrintFormat(): string
{
return $this->printFormat;
}
/**
* @param string $printFormat
*/
public function setPrintFormat(string $printFormat): void
{
$this->printFormat = $printFormat;
}
/**
* @return string|null
*/
public function getToken(): ?string
{
return $this->token;
}
/**
* @param string|null $token
*/
public function setToken(?string $token): void
{
$this->token = $token;
}
/**
* @return bool|null
*/
public function getWatermarkOnCartRendering(): ?bool
{
return $this->watermarkOnCartRendering;
}
/**
* @param bool|null $watermarkOnCartRendering
*/
public function setWatermarkOnCartRendering(?bool $watermarkOnCartRendering): void
{
$this->watermarkOnCartRendering = $watermarkOnCartRendering;
}
/**
* @return bool|null
*/
public function getAdvanced(): ?bool
{
return $this->advanced;
}
/**
* @param bool|null $advanced
*/
public function setAdvanced(?bool $advanced): void
{
$this->advanced = $advanced;
}
/**
* @return array|null
*/
public function getType(): ?array
{
return $this->type;
}
/**
* @param array|null $type
*/
public function setType(?array $type): void
{
$this->type = $type;
}
/**
* @return bool|null
*/
public function getFreeConfiguration(): ?bool
{
return $this->freeConfiguration;
}
/**
* @param bool|null $freeConfiguration
*/
public function setFreeConfiguration(?bool $freeConfiguration): void
{
$this->freeConfiguration = $freeConfiguration;
}
public function getFonts(): Collection
{
return $this->fonts;
}
public function addFont(Font $font): self
{
if (!$this->fonts->contains($font))
{
$this->fonts[] = $font;
$font->addModel($this);
}
return $this;
}
public function removeFont(Font $font): self
{
$this->fonts->removeElement($font);
$font->removeModel($this);
return $this;
}
public function clearFonts(): void {
foreach ($this->fonts as $font) {
$this->removeFont($font);
}
}
/**
* @return Font|null
*/
public function getDefaultFont(): ?Font
{
return $this->defaultFont;
}
/**
* @param Font|null $defaultFont
*/
public function setDefaultFont(?Font $defaultFont): void
{
$this->defaultFont = $defaultFont;
}
public function getFontColors(): Collection
{
return $this->fontColors;
}
public function addFontColor(FontColor $fontColor): self
{
if (!$this->fontColors->contains($fontColor)) {
$this->fontColors[] = $fontColor;
$fontColor->addModel($this);
}
return $this;
}
public function removeFontColor(FontColor $fontColor): self
{
$this->fontColors->removeElement($fontColor);
$fontColor->removeModel($this);
return $this;
}
public function clearFontColors(): void {
foreach ($this->fontColors as $fontColor) {
$this->removeFontColor($fontColor);
}
}
/**
* @return FontColor|null
*/
public function getDefaultFontColor(): ?FontColor
{
return $this->defaultFontColor;
}
/**
* @param FontColor|null $defaultFontColor
*/
public function setDefaultFontColor(?FontColor $defaultFontColor): void
{
$this->defaultFontColor = $defaultFontColor;
}
public function getLibraries(): Collection
{
return $this->libraries;
}
public function addLibrary(Library $library): self
{
if (!$this->libraries->contains($library))
{
$this->libraries[] = $library;
}
return $this;
}
public function removeLibrary(Library $library): self
{
$this->libraries->removeElement($library);
return $this;
}
public function clearLibraries(): void {
foreach ($this->libraries as $library) {
$this->removeLibrary($library);
}
}
public function getCode(): ?string
{
return $this->code;
}
public function setCode(?string $code): void
{
$this->code = $code;
}
/**
* @return bool|null
*/
public function getTextPersonalisation(): ?bool
{
return $this->textPersonalisation;
}
/**
* @param bool|null $textPersonalisation
*/
public function setTextPersonalisation(?bool $textPersonalisation): void
{
$this->textPersonalisation = $textPersonalisation;
}
public function getStrokeColors(): Collection
{
return $this->strokeColors;
}
public function addStrokeColor(FontColor $fontColor): self
{
if (!$this->strokeColors->contains($fontColor))
{
$this->strokeColors[] = $fontColor;
}
return $this;
}
public function removeStrokeColor(FontColor $fontColor): self
{
$this->strokeColors->removeElement($fontColor);
return $this;
}
public function clearStrokeColors(): void
{
foreach ($this->strokeColors as $fontColor) {
$this->removeStrokeColor($fontColor);
}
}
public function getShadowColors(): Collection
{
return $this->shadowColors;
}
public function addShadowColor(FontColor $fontColor): self
{
if (!$this->shadowColors->contains($fontColor))
{
$this->shadowColors[] = $fontColor;
}
return $this;
}
public function removeShadowColor(FontColor $fontColor): self
{
$this->shadowColors->removeElement($fontColor);
return $this;
}
public function clearShadowColors(): void
{
foreach ($this->shadowColors as $fontColor) {
$this->removeShadowColor($fontColor);
}
}
/**
* @return FontColor|null
*/
public function getDefaultStrokeColor(): ?FontColor
{
return $this->defaultStrokeColor;
}
/**
* @param FontColor|null $defaultStrokeColor
*/
public function setDefaultStrokeColor(?FontColor $defaultStrokeColor): void
{
$this->defaultStrokeColor = $defaultStrokeColor;
}
/**
* @return FontColor|null
*/
public function getDefaultShadowColor(): ?FontColor
{
return $this->defaultShadowColor;
}
/**
* @param FontColor|null $defaultShadowColor
*/
public function setDefaultShadowColor(?FontColor $defaultShadowColor): void
{
$this->defaultShadowColor = $defaultShadowColor;
}
}