<?php
namespace App\Entity;
use App\Repository\ReferencePriveRepository;
use Cofondateur\SocleTechniqueBundle\Annotation\CrudField;
use Cofondateur\SocleTechniqueBundle\Traits\SEOInterface;
use Cofondateur\SocleTechniqueBundle\Traits\SEOTrait;
use Cofondateur\SocleTechniqueBundle\Traits\SluggableInterface;
use Cofondateur\SocleTechniqueBundle\Traits\SluggableTrait;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation\ReferenceOne;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
use Vich\UploaderBundle\Mapping\Annotation\Uploadable;
use App\Form\ReferenceBlocFormType;
use App\Form\ReferenceMediaFormType;
use Cofondateur\SocleTechniqueBundle\Traits\SortableTrait;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass=ReferencePriveRepository::class)
* @UniqueEntity(
* fields={"slug"},
* errorPath="slug",
* message="Ce slug est déjà utilisé pour une autre références privée"
* )
* @Uploadable()
*/
class ReferencePrive implements SEOInterface, SluggableInterface
{
use SEOTrait;
use SortableTrait;
use SluggableTrait;
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
* @CrudField(label="Titre", index=true)
*/
private $title;
/**
* @ORM\Column(type="string")
*/
private $coverName;
/**
* @ORM\Column(type="integer")
*/
private $coverSize;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $coverUpdatedAt;
/**
* @Vich\UploadableField(mapping="default", fileNameProperty="coverName", size="coverSize")
* @CrudField(label="Visuel principal (bandeau top)")
*/
private $coverFile;
/**
* @ORM\Column(type="string", nullable=true)
* @CrudField(label="Alt")
*/
private $coverAlt;
/**
* @ORM\Column(type="string", length=255)
* @CrudField(index=true, label="Nom de l'entreprise")
*/
private $firmName;
/**
* @ORM\ManyToOne(targetEntity=ReferenceCity::class, inversedBy="referencePrives")
* @ORM\JoinColumn(nullable=false)
* @CrudField(label="Ville")
*/
private $city;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $logoName;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $logoSize;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $logoUpdatedAt;
/**
* @Vich\UploadableField(mapping="default", fileNameProperty="logoName", size="logoSize")
* @CrudField(label="Logo")
*/
private $logoFile;
/**
* @ORM\Column(type="string", nullable=true)
* @CrudField(label="Alt")
*/
private $logoAlt;
/**
* @ORM\Column(type="text")
* @CrudField(label="Résumé")
*/
private $resume;
/**
* @ORM\Column(type="string", length=255)
* @CrudField(tab="Introduction", label="Titre (mettre entre étoiles pour rendre le titre avec le surlignage Exemple : 'ceci est en bleu *ceci est surligné*')")
*/
private $introTitle;
/**
* @ORM\Column(type="text")
* @CrudField(tab="Introduction", label="Paragraphe", ckeditor=true)
*/
private $introParagraph;
/**
* @ORM\Column(type="string")
*/
private $introVisuelPanoramiqueName;
/**
* @ORM\Column(type="integer")
*/
private $introVisuelPanoramiqueSize;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $introVisuelPanoramiqueUpdatedAt;
/**
* @Vich\UploadableField(mapping="default", fileNameProperty="introVisuelPanoramiqueName", size="introVisuelPanoramiqueSize")
* @CrudField(tab="Introduction", label="Visuel panoramique (Poster de la vidéo si saisie)")
*/
private $introVisuelPanoramiqueFile;
/**
* @ORM\Column(type="string", nullable=true)
* @CrudField(tab="Introduction", label="Alt")
*/
private $introVisuelPanoramiqueAlt;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @CrudField(tab="Introduction", label="Url youtube")
*/
private $introVideoUrl;
/**
* @ORM\Column(type="array")
* @CrudField(tab="En savoir plus", label="Secteurs")
*/
private $moreSectors = [];
/**
* @ORM\Column(type="array")
* @CrudField(tab="En savoir plus", label="Expertises mobilisées")
*/
private $moreExpertises = [];
/**
* @ORM\Column(type="string", length=255)
* @CrudField(tab="En savoir plus", label="Titre")
*/
private $moreTitle;
/**
* @ORM\Column(type="text")
* @CrudField(tab="En savoir plus", label="Paragraphe", ckeditor=true)
*/
private $moreParagraph;
/**
* @ORM\Column(type="string", length=255)
* @CrudField(tab="Section bleu", label="Sur-titre")
*/
private $blueSubTitle;
/**
* @ORM\Column(type="string", length=255)
* @CrudField(tab="Section bleu", label="Titre (mettre entre étoiles pour rendre le titre avec le surlignage Exemple : 'ceci est en bleu *ceci est surligné*')")
*/
private $blueTitle;
/**
* @ORM\Column(type="text")
* @CrudField(tab="Section bleu", label="Premier paragraphe", ckeditor=true)
*/
private $blueParagraph1;
/**
* @ORM\Column(type="text", nullable=true)
* @CrudField(tab="Section bleu", label="Second paragraphe", ckeditor=true)
*/
private $blueParagraph2;
/**
* @ORM\OneToMany(targetEntity=ReferenceBloc::class, mappedBy="referencePrive", cascade={"persist", "remove"})
* @CrudField(label="Blocs", formType=ReferenceBlocFormType::class, tab="Blocs")
*/
private $blocs;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @CrudField(tab="Chiffres clés", label="Premier chiffre clé")
*/
private $keyNumber1Number;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @CrudField(tab="Chiffres clés", label="Premier libellé")
*/
private $keyNumber1Libelle;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @CrudField(tab="Chiffres clés", label="Second chiffre clé")
*/
private $keyNumber2Number;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @CrudField(tab="Chiffres clés", label="Second libellé")
*/
private $keyNumber2Libelle;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @CrudField(tab="Chiffres clés", label="Troisème chiffre clé")
*/
private $keyNumber3Number;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @CrudField(tab="Chiffres clés", label="Troisième libellé")
*/
private $keyNumber3Libelle;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @CrudField(tab="Chiffres clés", label="Quatrième chiffre clé")
*/
private $keyNumber4Number;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @CrudField(tab="Chiffres clés", label="Quatrième libellé")
*/
private $keyNumber4Libelle;
/**
* @ORM\OneToMany(targetEntity=ReferenceMedia::class, mappedBy="referencePrive", cascade={"persist", "remove"})
* @ORM\OrderBy({"position" = "ASC"})
* @CrudField(label="Galerie", formType=ReferenceMediaFormType::class, tab="Galerie")
*/
private $referenceMedia;
/**
* @ORM\Column(type="string", length=255)
* @CrudField(tab="Contact", label="Titre")
*/
private $contactTitle;
/**
* @ORM\Column(type="text")
* @CrudField(tab="Contact", label="Paragraphe")
*/
private $contactParagraph;
/**
* @ORM\ManyToMany(targetEntity=ExpertisePrive::class, mappedBy="referencesPrives")
*/
private $expertisePrives;
/**
* @ORM\ManyToMany(targetEntity=Solution::class, mappedBy="referencesPrives")
*/
private $solutions;
/**
* @ORM\ManyToMany(targetEntity=Homepage::class, mappedBy="referencesPrives")
*/
private $homepages;
/**
* @ORM\Column(type="boolean", nullable=true)
* @CrudField(label="Afficher dans le menu", index=true)
*/
private $displayOnMenu;
/**
* @ORM\ManyToMany(targetEntity=Actualite::class, mappedBy="ReferencePrive")
*/
private $actualites;
/**
* @ORM\OneToMany(targetEntity=SolutionReference::class, mappedBy="referencePrivate")
*/
private $solutionReferences;
public function __construct()
{
$this->blocs = new ArrayCollection();
$this->referenceMedia = new ArrayCollection();
$this->expertisePrives = new ArrayCollection();
$this->solutions = new ArrayCollection();
$this->homepages = new ArrayCollection();
$this->actualites = new ArrayCollection();
$this->solutionReferences = new ArrayCollection();
}
public function __toString(): string
{
return $this->title ?? $this->getId() ?? "N/A";
}
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
public function getCoverName(): ?string
{
return $this->coverName;
}
public function setCoverName(?string $coverName): self
{
$this->coverName = $coverName;
return $this;
}
public function getCoverSize(): ?int
{
return $this->coverSize;
}
public function setCoverSize(?int $coverSize): self
{
$this->coverSize = $coverSize;
return $this;
}
public function getCoverUpdatedAt(): ?\DateTimeInterface
{
return $this->coverUpdatedAt;
}
public function setCoverUpdatedAt(?\DateTimeInterface $coverUpdatedAt): self
{
$this->coverUpdatedAt = $coverUpdatedAt;
return $this;
}
public function getCoverFile(): ?File
{
return $this->coverFile;
}
public function setCoverFile(?File $coverFile): self
{
$this->coverFile = $coverFile;
if (null !== $this->coverFile) {
$this->coverUpdatedAt = new \DateTimeImmutable();
}
return $this;
}
public function getCoverAlt(): ?string
{
return $this->coverAlt;
}
public function setCoverAlt(?string $coverAlt): self
{
$this->coverAlt = $coverAlt;
return $this;
}
public function getFirmName(): ?string
{
return $this->firmName;
}
public function setFirmName(string $firmName): self
{
$this->firmName = $firmName;
return $this;
}
public function getCity(): ?ReferenceCity
{
return $this->city;
}
public function setCity(?ReferenceCity $city): self
{
$this->city = $city;
return $this;
}
public function getLogoName(): ?string
{
return $this->logoName;
}
public function setLogoName(?string $logoName): self
{
$this->logoName = $logoName;
return $this;
}
public function getLogoSize(): ?int
{
return $this->logoSize;
}
public function setLogoSize(?int $logoSize): self
{
$this->logoSize = $logoSize;
return $this;
}
public function getLogoUpdatedAt(): ?\DateTimeInterface
{
return $this->logoUpdatedAt;
}
public function setLogoUpdatedAt(?\DateTimeInterface $logoUpdatedAt): self
{
$this->logoUpdatedAt = $logoUpdatedAt;
return $this;
}
public function getLogoFile(): ?File
{
return $this->logoFile;
}
public function setLogoFile(?File $logoFile): self
{
$this->logoFile = $logoFile;
if (null !== $this->logoFile) {
$this->logoUpdatedAt = new \DateTimeImmutable();
}
return $this;
}
public function getLogoAlt(): ?string
{
return $this->logoAlt;
}
public function setLogoAlt(?string $logoAlt): self
{
$this->logoAlt = $logoAlt;
return $this;
}
public function getResume(): ?string
{
return $this->resume;
}
public function setResume(string $resume): self
{
$this->resume = $resume;
return $this;
}
public function getIntroTitle(): ?string
{
return $this->introTitle;
}
public function setIntroTitle(string $introTitle): self
{
$this->introTitle = $introTitle;
return $this;
}
public function getIntroParagraph(): ?string
{
return $this->introParagraph;
}
public function setIntroParagraph(string $introParagraph): self
{
$this->introParagraph = $introParagraph;
return $this;
}
public function getIntroVisuelPanoramiqueName(): ?string
{
return $this->introVisuelPanoramiqueName;
}
public function setIntroVisuelPanoramiqueName(?string $introVisuelPanoramiqueName): self
{
$this->introVisuelPanoramiqueName = $introVisuelPanoramiqueName;
return $this;
}
public function getIntroVisuelPanoramiqueSize(): ?int
{
return $this->introVisuelPanoramiqueSize;
}
public function setIntroVisuelPanoramiqueSize(?int $introVisuelPanoramiqueSize): self
{
$this->introVisuelPanoramiqueSize = $introVisuelPanoramiqueSize;
return $this;
}
public function getIntroVisuelPanoramiqueUpdatedAt(): ?\DateTimeInterface
{
return $this->introVisuelPanoramiqueUpdatedAt;
}
public function setIntroVisuelPanoramiqueUpdatedAt(?\DateTimeInterface $introVisuelPanoramiqueUpdatedAt): self
{
$this->introVisuelPanoramiqueUpdatedAt = $introVisuelPanoramiqueUpdatedAt;
return $this;
}
public function getIntroVisuelPanoramiqueFile(): ?File
{
return $this->introVisuelPanoramiqueFile;
}
public function setIntroVisuelPanoramiqueFile(?File $introVisuelPanoramiqueFile): self
{
$this->introVisuelPanoramiqueFile = $introVisuelPanoramiqueFile;
if (null !== $this->introVisuelPanoramiqueFile) {
$this->introVisuelPanoramiqueUpdatedAt = new \DateTimeImmutable();
}
return $this;
}
public function getIntroVisuelPanoramiqueAlt(): ?string
{
return $this->introVisuelPanoramiqueAlt;
}
public function setIntroVisuelPanoramiqueAlt(?string $introVisuelPanoramiqueAlt): self
{
$this->introVisuelPanoramiqueAlt = $introVisuelPanoramiqueAlt;
return $this;
}
public function getIntroVideoUrl(): ?string
{
return $this->introVideoUrl;
}
public function setIntroVideoUrl(?string $introVideoUrl): self
{
if ($this->isYouTubeUrl($introVideoUrl) && !$this->isYouTubeEmbedUrl($introVideoUrl)) {
// Transforme l'URL en URL embed
$introVideoUrl = $this->convertToEmbedUrl($introVideoUrl);
}
$this->introVideoUrl = $introVideoUrl;
return $this;
}
private function isYouTubeUrl(?string $url): bool
{
// Vérifie si l'URL est une URL YouTube valide (à adapter selon tes besoins)
// Retourne true ou false en fonction du format de l'URL
// Par exemple, en vérifiant si l'URL contient "youtube.com" ou "youtu.be"
return (bool) preg_match('/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/\s]{11})/', $url);
}
private function isYouTubeEmbedUrl(?string $url): bool
{
// Vérifie si l'URL est déjà au format embed YouTube
// Retourne true ou false en fonction du format de l'URL
// Par exemple, en vérifiant si l'URL contient "youtube.com/embed/"
return (bool) preg_match('/youtube\.com\/embed\//', $url);
}
private function convertToEmbedUrl(string $url): string
{
// Transforme une URL YouTube classique en URL embed
// Par exemple, en remplaçant le début de l'URL
// Tu devras adapter cette logique pour transformer correctement l'URL
$videoId = $this->getYouTubeVideoId($url);
return "https://www.youtube.com/embed/{$videoId}";
}
private function getYouTubeVideoId(string $url): string
{
// Récupère l'identifiant de la vidéo YouTube depuis l'URL
// Par exemple, en extrayant l'ID de la vidéo depuis l'URL
// Tu devras adapter cette logique pour extraire correctement l'ID de la vidéo
$videoId = ''; // Logique pour extraire l'ID de la vidéo
// Modèle de regex pour l'URL de YouTube
$pattern = '/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/\s]{11})/';
// Vérification si l'URL correspond au modèle regex
if (preg_match($pattern, $url, $matches)) {
// Le groupe de capture 1 contient l'ID de la vidéo
$videoId = $matches[1];
}
return $videoId;
}
public function getMoreSectors(): ?array
{
return $this->moreSectors;
}
public function setMoreSectors(array $moreSectors): self
{
$this->moreSectors = $moreSectors;
return $this;
}
public function getMoreExpertises(): ?array
{
return $this->moreExpertises;
}
public function setMoreExpertises(array $moreExpertises): self
{
$this->moreExpertises = $moreExpertises;
return $this;
}
public function getMoreTitle(): ?string
{
return $this->moreTitle;
}
public function setMoreTitle(string $moreTitle): self
{
$this->moreTitle = $moreTitle;
return $this;
}
public function getMoreParagraph(): ?string
{
return $this->moreParagraph;
}
public function setMoreParagraph(string $moreParagraph): self
{
$this->moreParagraph = $moreParagraph;
return $this;
}
public function getBlueSubTitle(): ?string
{
return $this->blueSubTitle;
}
public function setBlueSubTitle(string $blueSubTitle): self
{
$this->blueSubTitle = $blueSubTitle;
return $this;
}
public function getBlueTitle(): ?string
{
return $this->blueTitle;
}
public function setBlueTitle(string $blueTitle): self
{
$this->blueTitle = $blueTitle;
return $this;
}
public function getBlueParagraph1(): ?string
{
return $this->blueParagraph1;
}
public function setBlueParagraph1(string $blueParagraph1): self
{
$this->blueParagraph1 = $blueParagraph1;
return $this;
}
public function getBlueParagraph2(): ?string
{
return $this->blueParagraph2;
}
public function setBlueParagraph2(?string $blueParagraph2): self
{
$this->blueParagraph2 = $blueParagraph2;
return $this;
}
/**
* @return Collection<int, ReferenceBloc>
*/
public function getBlocs(): Collection
{
return $this->blocs;
}
public function addBloc(ReferenceBloc $bloc): self
{
if (!$this->blocs->contains($bloc)) {
$this->blocs[] = $bloc;
$bloc->setReferencePrive($this);
}
return $this;
}
public function removeBloc(ReferenceBloc $bloc): self
{
if ($this->blocs->removeElement($bloc)) {
// set the owning side to null (unless already changed)
if ($bloc->getReferencePrive() === $this) {
$bloc->setReferencePrive(null);
}
}
return $this;
}
public function getKeyNumber1Number(): ?string
{
return $this->keyNumber1Number;
}
public function setKeyNumber1Number(?string $keyNumber1Number): self
{
$this->keyNumber1Number = $keyNumber1Number;
return $this;
}
public function getKeyNumber1Libelle(): ?string
{
return $this->keyNumber1Libelle;
}
public function setKeyNumber1Libelle(?string $keyNumber1Libelle): self
{
$this->keyNumber1Libelle = $keyNumber1Libelle;
return $this;
}
public function getKeyNumber2Number(): ?string
{
return $this->keyNumber2Number;
}
public function setKeyNumber2Number(?string $keyNumber2Number): self
{
$this->keyNumber2Number = $keyNumber2Number;
return $this;
}
public function getKeyNumber2Libelle(): ?string
{
return $this->keyNumber2Libelle;
}
public function setKeyNumber2Libelle(?string $keyNumber2Libelle): self
{
$this->keyNumber2Libelle = $keyNumber2Libelle;
return $this;
}
public function getKeyNumber3Number(): ?string
{
return $this->keyNumber3Number;
}
public function setKeyNumber3Number(?string $keyNumber3Number): self
{
$this->keyNumber3Number = $keyNumber3Number;
return $this;
}
public function getKeyNumber3Libelle(): ?string
{
return $this->keyNumber3Libelle;
}
public function setKeyNumber3Libelle(?string $keyNumber3Libelle): self
{
$this->keyNumber3Libelle = $keyNumber3Libelle;
return $this;
}
public function getKeyNumber4Number(): ?string
{
return $this->keyNumber4Number;
}
public function setKeyNumber4Number(?string $keyNumber4Number): self
{
$this->keyNumber4Number = $keyNumber4Number;
return $this;
}
public function getKeyNumber4Libelle(): ?string
{
return $this->keyNumber4Libelle;
}
public function setKeyNumber4Libelle(?string $keyNumber4Libelle): self
{
$this->keyNumber4Libelle = $keyNumber4Libelle;
return $this;
}
/**
* @return Collection<int, ReferenceMedia>
*/
public function getReferenceMedia(): Collection
{
return $this->referenceMedia;
}
public function addReferenceMedium(ReferenceMedia $referenceMedium): self
{
if (!$this->referenceMedia->contains($referenceMedium)) {
$this->referenceMedia[] = $referenceMedium;
$referenceMedium->setReferencePrive($this);
}
return $this;
}
public function removeReferenceMedium(ReferenceMedia $referenceMedium): self
{
if ($this->referenceMedia->removeElement($referenceMedium)) {
// set the owning side to null (unless already changed)
if ($referenceMedium->getReferencePrive() === $this) {
$referenceMedium->setReferencePrive(null);
}
}
return $this;
}
public function getContactTitle(): ?string
{
return $this->contactTitle;
}
public function setContactTitle(string $contactTitle): self
{
$this->contactTitle = $contactTitle;
return $this;
}
public function getContactParagraph(): ?string
{
return $this->contactParagraph;
}
public function setContactParagraph(string $contactParagraph): self
{
$this->contactParagraph = $contactParagraph;
return $this;
}
/**
* @return Collection<int, ExpertisePrive>
*/
public function getExpertisePrives(): Collection
{
return $this->expertisePrives;
}
public function addExpertisePrife(ExpertisePrive $expertisePrife): self
{
if (!$this->expertisePrives->contains($expertisePrife)) {
$this->expertisePrives[] = $expertisePrife;
$expertisePrife->addReferencesPrife($this);
}
return $this;
}
public function removeExpertisePrife(ExpertisePrive $expertisePrife): self
{
if ($this->expertisePrives->removeElement($expertisePrife)) {
$expertisePrife->removeReferencesPrife($this);
}
return $this;
}
/**
* @return Collection<int, Solution>
*/
public function getSolutions(): Collection
{
return $this->solutions;
}
public function addSolution(Solution $solution): self
{
if (!$this->solutions->contains($solution)) {
$this->solutions[] = $solution;
$solution->addReferencesPrife($this);
}
return $this;
}
public function removeSolution(Solution $solution): self
{
if ($this->solutions->removeElement($solution)) {
$solution->removeReferencesPrife($this);
}
return $this;
}
/**
* @return Collection<int, Homepage>
*/
public function getHomepages(): Collection
{
return $this->homepages;
}
public function addHomepage(Homepage $homepage): self
{
if (!$this->homepages->contains($homepage)) {
$this->homepages[] = $homepage;
$homepage->addReferencesPrife($this);
}
return $this;
}
public function removeHomepage(Homepage $homepage): self
{
if ($this->homepages->removeElement($homepage)) {
$homepage->removeReferencesPrife($this);
}
return $this;
}
public function isDisplayOnMenu(): ?bool
{
return $this->displayOnMenu;
}
public function setDisplayOnMenu(?bool $displayOnMenu): self
{
$this->displayOnMenu = $displayOnMenu;
return $this;
}
/**
* @return Collection<int, Actualite>
*/
public function getActualites(): Collection
{
return $this->actualites;
}
public function addActualite(Actualite $actualite): self
{
if (!$this->actualites->contains($actualite)) {
$this->actualites[] = $actualite;
$actualite->addReferencePrive($this);
}
return $this;
}
public function removeActualite(Actualite $actualite): self
{
if ($this->actualites->removeElement($actualite)) {
$actualite->removeReferencePrive($this);
}
return $this;
}
/**
* @return Collection<int, SolutionReference>
*/
public function getSolutionReferences(): Collection
{
return $this->solutionReferences;
}
public function addSolutionReference(SolutionReference $solutionReference): self
{
if (!$this->solutionReferences->contains($solutionReference)) {
$this->solutionReferences[] = $solutionReference;
$solutionReference->setReferencePrivate($this);
}
return $this;
}
public function removeSolutionReference(SolutionReference $solutionReference): self
{
if ($this->solutionReferences->removeElement($solutionReference)) {
// set the owning side to null (unless already changed)
if ($solutionReference->getReferencePrivate() === $this) {
$solutionReference->setReferencePrivate(null);
}
}
return $this;
}
}