<?php
declare(strict_types=1);
namespace App\Entity\Configurator;
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\ResourceInterface;
use Symfony\Component\HttpFoundation\File\UploadedFile;
/**
* /!\ Si un champ est rajouté ici, il faut aussi le rajouter dans ElementCloneGenerator
*
* @ORM\Entity
* @ORM\Table(name="app_configurator_element")
*/
class Element implements ResourceInterface
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private ?int $id = null;
/**
* plan (premier plan, deuxieme plan etc)
* @ORM\Column(type="integer", nullable=false)
*/
private int $level;
/**
* @ORM\Column(type="string", nullable=false)
*/
private string $type = ElementType::TYPE_TEXT;
/**
* @ORM\Column(type="integer", nullable=false, name="coordinates_x")
*/
private int $coordinatesX;
/**
* @ORM\Column(type="integer", nullable=false, name="coordinates_y")
*/
private int $coordinatesY;
/**
* px
* @ORM\Column(type="float", nullable=false, options={"default" : 100})
*/
private ?float $height = 100;
/**
* px
* @ORM\Column(type="float", nullable=false, options={"default" : 100})
*/
private ?float $width = 100;
/**
* visible par l'utilisateur sur le configurateur
* @ORM\Column(name="visible_on_configurator", type="boolean", nullable=true)
*/
private bool $visibleOnConfigurator = true;
/**
* visible sur le produit final
* @ORM\Column(name="visible_on_print", type="boolean", nullable=true, options={"default" : 1})
*/
private ?bool $visibleOnPrint = true;
/**
* @ORM\Column(name="curved_text", type="boolean", options={"default" : 0})
*/
private bool $curvedText = false;
/**
* s'il est relié à la zone d'impression, l'élément sera coupé au niveau de la zone d'impression même sur le configurateur
* s'il n'est relié à la zone d'impression, l'élément ne sera pas coupé au niveau de la zone d'impression sur le configurateur
* @ORM\Column(name="linked_to_print_zone", type="boolean", nullable=true, options={"default" : 1})
*/
private bool $linkedToPrintZone = true;
/**
* si true, l'élément doit se mélanger au fond
* @ORM\Column(type="boolean", options={"default" : 0})
*/
private ?bool $blended = false;
/**
* @ORM\ManyToOne(targetEntity=Model::class, inversedBy="elements")
* @ORM\JoinColumn(nullable=true)
*/
private ?Model $model;
/**
* @ORM\Column(type="string", nullable=true)
*/
private ?string $name = null;
/**
* @ORM\Column(name="default_text", type="string", nullable=true)
*/
private ?string $defaultText = null;
/**
* @ORM\Column(name="text_bold", type="boolean", options={"default": 0})
*/
private ?bool $textBold = null;
/**
* @ORM\Column(name="text_italic", type="boolean", options={"default": 0})
*/
private bool $textItalic = false;
/**
* @ORM\Column(name="text_alignment", type="string", nullable=true)
*/
private ?string $textAlignment = null;
/**
* @ORM\Column(name="default_text_size", type="integer", nullable=true)
*/
private ?int $defaultTextSize = null;
/**
* @ORM\Column(type="integer", options={"default" : 0})
*/
private int $orientation = 0;
/**
* @ORM\Column(type="smallint", options={"default" : 1})
*/
private int $linesMax = 1;
/**
* @ORM\Column(name="character_limit", type="smallint", nullable=true)
*/
private ?int $characterLimit = null;
/**
* @ORM\Column(name="line_space", type="float", nullable=true)
*/
private ?float $lineSpace = null;
/**
* @ORM\Column(name="character_line_limit", type="smallint", nullable=true)
*/
private ?int $characterLineLimit = null;
/**
* @ORM\Column(name="text_size_min", type="smallint", nullable=true)
*/
private ?int $textSizeMin = null;
/**
* @ORM\Column(name="allow_line_space_change", type="boolean", options={"default" : 0})
*/
private bool $allowLineSpaceChange = false;
/**
* @ORM\Column(name="allow_rotation", type="boolean", options={"default" : 0})
*/
private bool $allowRotation = false;
/**
* @ORM\Column(name="allow_movement", type="boolean", options={"default" : 0})
*/
private bool $allowMovement = false;
/**
* @ORM\Column(type="boolean", options={"default" : 1})
*/
private bool $mandatory = true;
/**
* indique si le print color doit être prise en compte lors de l'impression
* @ORM\Column(type="boolean", options={"default" : 0})
*/
private bool $forcePrintColor = false;
/**
* @ORM\Column(name="print_color", type="string", nullable=true)
*/
private ?string $printColor = null;
/**
* @ORM\ManyToMany(targetEntity=Library::class)
* @ORM\JoinTable(
* name="app_configurator_element_library",
* joinColumns={@ORM\JoinColumn(name="element_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="library_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")}
* )
*/
private Collection $libraries;
/**
* @ORM\ManyToMany(targetEntity=Font::class, mappedBy="elements")
* @ORM\JoinTable(
* name="app_configurator_element_font",
* joinColumns={@ORM\JoinColumn(name="element_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="elements")
* @ORM\JoinTable(
* name="app_configurator_element_font_color",
* joinColumns={@ORM\JoinColumn(name="element_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_element_stroke_color",
* joinColumns={@ORM\JoinColumn(name="element_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_element_shadow_color",
* joinColumns={@ORM\JoinColumn(name="element_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=Library::class)
* @ORM\JoinColumn(nullable=true, name="default_library")
*/
private ?Library $defaultLibrary = null;
/**
* @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\Column(name="image_path", type="string", nullable=true)
*/
private ?string $imagePath = null;
/**
* @ORM\Column(name="image_path_canva", type="string", nullable=true)
*/
private ?string $imagePathCanva = null;
private ?UploadedFile $file = null;
/**
* @ORM\OneToMany(targetEntity=ConfigurationItem::class, mappedBy="element", cascade={"persist"})
*/
private Collection $configurationItems;
/**
* for curved text
* @ORM\Column(type="integer", nullable=true)
*/
private ?int $diameter = null;
/**
* @ORM\ManyToOne(targetEntity=Workflow::class)
* @ORM\JoinColumn(nullable=true, name="workflow_id")
*/
private ?Workflow $workflow = null;
public function __construct()
{
$this->libraries = new ArrayCollection();
$this->fonts = new ArrayCollection();
$this->fontColors = new ArrayCollection();
$this->strokeColors = new ArrayCollection();
$this->shadowColors = new ArrayCollection();
$this->configurationItems = 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 int
*/
public function getLevel(): int
{
return $this->level;
}
/**
* @param int $level
*/
public function setLevel(int $level): void
{
$this->level = $level;
}
/**
* @return string
*/
public function getType(): string
{
return $this->type;
}
/**
* @param string $type
*/
public function setType(string $type): void
{
$this->type = $type;
}
/**
* @return int
*/
public function getCoordinatesX(): int
{
return $this->coordinatesX;
}
/**
* @param int $coordinatesX
*/
public function setCoordinatesX(int $coordinatesX): void
{
$this->coordinatesX = $coordinatesX;
}
/**
* @return int
*/
public function getCoordinatesY(): int
{
return $this->coordinatesY;
}
/**
* @param int $coordinatesY
*/
public function setCoordinatesY(int $coordinatesY): void
{
$this->coordinatesY = $coordinatesY;
}
/**
* @return float
*/
public function getHeight(): float
{
return $this->height;
}
/**
* @param float $height
*/
public function setHeight(float $height): void
{
$this->height = $height;
}
/**
* @return int
*/
public function getWidth(): float
{
return $this->width;
}
/**
* @param float $width
*/
public function setWidth(float $width): void
{
$this->width = $width;
}
/**
* @return Model
*/
public function getModel(): Model
{
return $this->model;
}
/**
* @param ?Model $model
*/
public function setModel(?Model $model): void
{
$this->model = $model;
}
/**
* @return string|null
*/
public function getName(): ?string
{
return $this->name;
}
/**
* @param string|null $name
*/
public function setName(?string $name): void
{
$this->name = $name;
}
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 getFonts(): Collection
{
return $this->fonts;
}
public function addFont(Font $font): self
{
if (!$this->fonts->contains($font))
{
$this->fonts[] = $font;
$font->addElement($this);
}
return $this;
}
public function removeFont(Font $font): self
{
$this->fonts->removeElement($font);
$font->removeElement($this);
return $this;
}
public function clearFonts(): void
{
foreach ($this->fonts as $font) {
$this->removeFont($font);
}
}
public function getFontColors(): Collection
{
return $this->fontColors;
}
public function addFontColor(FontColor $fontColor): self
{
if (!$this->fontColors->contains($fontColor))
{
$this->fontColors[] = $fontColor;
$fontColor->addElement($this);
}
return $this;
}
public function removeFontColor(FontColor $fontColor): self
{
$this->fontColors->removeElement($fontColor);
$fontColor->removeElement($this);
return $this;
}
public function clearFontColors(): void
{
foreach ($this->fontColors as $fontColor) {
$this->removeFontColor($fontColor);
}
}
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 string|null
*/
public function getImagePath(): ?string
{
return $this->imagePath;
}
/**
* @param string|null $imagePath
*/
public function setImagePath(?string $imagePath): void
{
$this->imagePath = $imagePath;
}
/**
* @return UploadedFile|null
*/
public function getFile(): ?UploadedFile
{
return $this->file;
}
/**
* @param UploadedFile|null $file
*/
public function setFile(?UploadedFile $file): void
{
$this->file = $file;
}
/**
* @return string|null
*/
public function getDefaultText(): ?string
{
return $this->defaultText;
}
/**
* @param string|null $defaultText
*/
public function setDefaultText(?string $defaultText): void
{
if ($defaultText)
$this->defaultText = str_replace(["<br>", "<p>", "</p>"], ["\r\n", "", "\r\n"], $defaultText);
else
$this->defaultText = null;
}
/**
* @return int
*/
public function getOrientation(): int
{
return $this->orientation;
}
/**
* @param int $orientation
*/
public function setOrientation(int $orientation): void
{
$this->orientation = $orientation;
}
public function getConfigurationItems(): Collection
{
return $this->configurationItems;
}
public function addConfigurationItem(ConfigurationItem $configurationItem): self
{
if (!$this->configurationItems->contains($configurationItem)) {
$this->configurationItems[] = $configurationItem;
$configurationItem->setElement($this);
}
return $this;
}
public function removeConfigurationItem(ConfigurationItem $configurationItem): self
{
if ($this->configurationItems->removeElement($configurationItem)) {
// set the owning side to null (unless already changed)
if ($configurationItem->getElement() === $this) {
$configurationItem->setElement(null);
}
}
return $this;
}
/**
* @return bool
*/
public function isAllowRotation(): bool
{
return $this->allowRotation;
}
/**
* @param bool $allowRotation
*/
public function setAllowRotation(bool $allowRotation): void
{
$this->allowRotation = $allowRotation;
}
/**
* @return bool
*/
public function isVisibleOnConfigurator(): bool
{
return $this->visibleOnConfigurator;
}
/**
* @param bool $visibleOnConfigurator
*/
public function setVisibleOnConfigurator(bool $visibleOnConfigurator): void
{
$this->visibleOnConfigurator = $visibleOnConfigurator;
}
/**
* @return bool
*/
public function isVisibleOnPrint(): ?bool
{
return $this->visibleOnPrint;
}
public function setVisibleOnPrint(bool $visibleOnPrint): void
{
$this->visibleOnPrint = $visibleOnPrint;
}
/**
* @return Library|null
*/
public function getDefaultLibrary(): ?Library
{
return $this->defaultLibrary;
}
/**
* @param Library|null $defaultLibrary
*/
public function setDefaultLibrary(?Library $defaultLibrary): void
{
$this->defaultLibrary = $defaultLibrary;
}
/**
* @return Font|null
*/
public function getDefaultFont(): ?Font
{
return $this->defaultFont;
}
/**
* @param Font|null $defaultFont
*/
public function setDefaultFont(?Font $defaultFont): void
{
$this->defaultFont = $defaultFont;
}
/**
* @return FontColor|null
*/
public function getDefaultFontColor(): ?FontColor
{
return $this->defaultFontColor;
}
/**
* @param FontColor|null $defaultFontColor
*/
public function setDefaultFontColor(?FontColor $defaultFontColor): void
{
$this->defaultFontColor = $defaultFontColor;
}
/**
* @return bool
*/
public function isLinkedToPrintZone(): bool
{
return $this->linkedToPrintZone;
}
/**
* @param bool $linkedToPrintZone
*/
public function setLinkedToPrintZone(bool $linkedToPrintZone): void
{
$this->linkedToPrintZone = $linkedToPrintZone;
}
/**
* @return bool
*/
public function isAllowMovement(): bool
{
return $this->allowMovement;
}
/**
* @param bool $allowMovement
*/
public function setAllowMovement(bool $allowMovement): void
{
$this->allowMovement = $allowMovement;
}
/**
* @return bool
*/
public function isMandatory(): bool
{
return $this->mandatory;
}
/**
* @param bool $mandatory
*/
public function setMandatory(bool $mandatory): void
{
$this->mandatory = $mandatory;
}
/**
* @return int
*/
public function getLinesMax(): int
{
return $this->linesMax;
}
/**
* @param int $linesMax
*/
public function setLinesMax(int $linesMax): void
{
$this->linesMax = $linesMax;
}
/**
* @return bool
*/
public function isCurvedText(): bool
{
return $this->curvedText;
}
/**
* @param bool $curvedText
*/
public function setCurvedText(bool $curvedText): void
{
$this->curvedText = $curvedText;
}
/**
* @return int|null
*/
public function getDiameter(): ?int
{
return $this->diameter;
}
/**
* @param int|null $diameter
*/
public function setDiameter(?int $diameter): void
{
$this->diameter = $diameter;
}
/**
* @return int|null
*/
public function getDefaultTextSize(): ?int
{
return $this->defaultTextSize;
}
/**
* @param int|null $defaultTextSize
*/
public function setDefaultTextSize(?int $defaultTextSize): void
{
$this->defaultTextSize = $defaultTextSize;
}
/**
* @return string|null
*/
public function getPrintColor(): ?string
{
return $this->printColor;
}
/**
* @param string|null $printColor
*/
public function setPrintColor(?string $printColor): void
{
$this->printColor = $printColor;
}
/**
* @return string|null
*/
public function getImagePathCanva(): ?string
{
return $this->imagePathCanva;
}
/**
* @param string|null $imagePathCanva
*/
public function setImagePathCanva(?string $imagePathCanva): void
{
$this->imagePathCanva = $imagePathCanva;
}
/**
* @return bool|null
*/
public function getTextBold(): ?bool
{
return $this->textBold;
}
/**
* @param bool|null $textBold
*/
public function setTextBold(?bool $textBold): void
{
$this->textBold = $textBold;
}
/**
* @return bool
*/
public function isTextItalic(): bool
{
return $this->textItalic;
}
/**
* @param bool $textItalic
*/
public function setTextItalic(bool $textItalic): void
{
$this->textItalic = $textItalic;
}
/**
* @return string|null
*/
public function getTextAlignment(): ?string
{
return $this->textAlignment;
}
/**
* @param string|null $textAlignment
*/
public function setTextAlignment(?string $textAlignment): void
{
$this->textAlignment = $textAlignment;
}
/**
* @return bool|null
*/
public function getBlended(): ?bool
{
return $this->blended;
}
/**
* @param bool|null $blended
*/
public function setBlended(?bool $blended): void
{
$this->blended = $blended;
}
/**
* @return bool
*/
public function isForcePrintColor(): bool
{
return $this->forcePrintColor;
}
/**
* @param bool $forcePrintColor
*/
public function setForcePrintColor(bool $forcePrintColor): void
{
$this->forcePrintColor = $forcePrintColor;
}
/**
* @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;
}
/**
* @return int|null
*/
public function getCharacterLimit(): ?int
{
return $this->characterLimit;
}
/**
* @param int|null $characterLimit
*/
public function setCharacterLimit(?int $characterLimit): void
{
$this->characterLimit = $characterLimit;
}
/**
* @return float|null
*/
public function getLineSpace(): ?float
{
return $this->lineSpace;
}
/**
* @param float|null $lineSpace
*/
public function setLineSpace(?float $lineSpace): void
{
$this->lineSpace = $lineSpace;
}
/**
* @return int|null
*/
public function getCharacterLineLimit(): ?int
{
return $this->characterLineLimit;
}
/**
* @param int|null $characterLineLimit
*/
public function setCharacterLineLimit(?int $characterLineLimit): void
{
$this->characterLineLimit = $characterLineLimit;
}
/**
* @return int|null
*/
public function getTextSizeMin(): ?int
{
return $this->textSizeMin;
}
/**
* @param int|null $textSizeMin
*/
public function setTextSizeMin(?int $textSizeMin): void
{
$this->textSizeMin = $textSizeMin;
}
/**
* @return bool
*/
public function isAllowLineSpaceChange(): bool
{
return $this->allowLineSpaceChange;
}
/**
* @param bool $allowLineSpaceChange
*/
public function setAllowLineSpaceChange(bool $allowLineSpaceChange): void
{
$this->allowLineSpaceChange = $allowLineSpaceChange;
}
/**
* @return Workflow|null
*/
public function getWorkflow(): ?Workflow
{
return $this->workflow;
}
/**
* @param Workflow|null $workflow
*/
public function setWorkflow(?Workflow $workflow): void
{
$this->workflow = $workflow;
}
}