<?php
namespace App\Entity;
use App\Entity\SonataClassificationCategory;
use App\Entity\SonataClassificationTag;
use App\Application\Sonata\MediaBundle\Entity\Media;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Product
*
* @ORM\Table(name="product")
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product
{
use \Gedmo\Timestampable\Traits\TimestampableEntity;
use BlameableEntity;
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* Title
* @ORM\Column(name="title", type="string", length=100)
*/
private $title = "";
/**
* Tagline
* @Assert\Length(max=140)
* @ORM\Column(name="tagline", type="string", length=140, nullable=true)
*/
private $tagline;
/**
* @ORM\OneToMany(targetEntity="App\Entity\ProductDeclinaison", mappedBy="product", cascade={"persist","remove"}, orphanRemoval=true)
* @ORM\OrderBy({"position" = "ASC"})
*/
private $declinaison;
/**
* @ORM\ManyToOne(targetEntity="App\Application\Sonata\MediaBundle\Entity\Media", cascade={"persist"})
*/
private $imageCaption;
/**
* @var string
* @ORM\Column(name="photo_credit",type="string", length=255, nullable=true)
*/
private $photoCredit;
/**
* @ORM\ManyToOne(targetEntity="App\Application\Sonata\MediaBundle\Entity\Media", cascade={"persist"})
*/
private $banner;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\SonataClassificationCategory", cascade={"persist"})
*/
private $category;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\SonataClassificationCategory", cascade={"persist"})
*/
private $eventMainCategory;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\SonataClassificationCategory", cascade={"persist"})
*/
private $eventCategory;
/**
* @Gedmo\Slug(fields={"title"})
* @ORM\Column(length=128, unique=true)
*/
private $slug;
/**
* Intro
* @ORM\Column(name="intro", type="text", nullable=true)
*/
private $intro;
/**
* Description
* @ORM\Column(name="description", type="text", nullable=true)
*/
private $description;
/**
* @var ArrayCollection $keyBenefits
* @ORM\OneToMany(targetEntity="App\Entity\KeyBenefit", mappedBy="product",cascade={"persist"}, orphanRemoval=true)
* @ORM\OrderBy({"position" = "ASC"})
*/
private $keyBenefits;
/**
* @var boolean
* @ORM\Column(name="publish", type="boolean")
*/
private $publish = false;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\SonataClassificationTag")
*/
private $tags;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\SonataClassificationTag")
* @ORM\JoinTable(
* name="product_insight_tag",
* joinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")}
* )
*/
private $insightTags;
/**
* @Gedmo\SortablePosition
* @ORM\Column(name="position", type="integer", nullable=false)
*/
private $position;
public function __construct()
{
$this->keyBenefits = new ArrayCollection();
$this->tags = new ArrayCollection();
$this->declinaison = new ArrayCollection();
}
/**
* @return mixed
*/
public function getEventMainCategory()
{
return $this->eventMainCategory;
}
/**
* @param mixed $eventMainCategory
*/
public function setEventMainCategory($eventMainCategory): void
{
$this->eventMainCategory = $eventMainCategory;
}
/**
* @return mixed
*/
public function getEventCategory()
{
return $this->eventCategory;
}
/**
* @param mixed $eventCategory
*/
public function setEventCategory($eventCategory): void
{
$this->eventCategory = $eventCategory;
}
/**
* @return mixed
*/
public function getInsightTags()
{
return $this->insightTags;
}
/**
* @param mixed $insightTags
*/
public function setInsightTags($insightTags): void
{
$this->insightTags = $insightTags;
}
/**
* @return string
*/
public function getPhotoCredit(): ?string
{
return $this->photoCredit;
}
/**
* @param string $photoCredit
*/
public function setPhotoCredit(string $photoCredit = null): void
{
$this->photoCredit = $photoCredit;
}
public function __toString()
{
return $this->getTitle();
}
/**
* Get title
*
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* Set title
*
* @param string $title
*
* @return Product
*/
public function setTitle($title)
{
$this->title = $title;
return $this;
}
/**
* Add tag
*
* @param SonataClassificationTag $tag
*
* @return Product
*/
public function addTag(SonataClassificationTag $tag)
{
$this->tags[] = $tag;
return $this;
}
/**
* Remove tag
*
* @param SonataClassificationTag $tag
*/
public function removeTag(SonataClassificationTag $tag)
{
$this->tags->removeElement($tag);
}
/**
* Get tags
*
* @return Collection
*/
public function getTags()
{
return $this->tags;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
public function toString(): string
{
return "{id=" . $this->id . "}";
}
/**
* @return string
*/
public function getTagline()
{
return $this->tagline;
}
/**
* @param string $tagline
*/
public function setTagline($tagline)
{
$this->tagline = $tagline;
}
/**
* @return string
*/
public function getBanner()
{
return $this->banner;
}
/**
* @param Media $banner
* @return Product
*/
public function setBanner(Media $banner = null)
{
$this->banner = $banner;
return $this;
}
/**
* @return mixed
*/
public function getImageCaption()
{
return $this->imageCaption;
}
/**
* @param mixed $imageCaption
*/
public function setImageCaption($imageCaption): void
{
$this->imageCaption = $imageCaption;
}
/**
* @return string
*/
public function getIntro()
{
return $this->intro;
}
/**
* @param string $intro
*/
public function setIntro($intro)
{
$this->intro = $intro;
}
/**
* @return string
*/
public function getDescription()
{
return $this->description;
}
/**
* @param string $description
*/
public function setDescription($description)
{
$this->description = $description;
}
/**
* Add keyBenefit
*
* @param KeyBenefit $keyBenefit
* @return Product
*/
public function addKeyBenefit(KeyBenefit $keyBenefit)
{
$keyBenefit->setProduct($this);
$this->keyBenefits->add($keyBenefit);
return $this;
}
/**
* Remove keyBenefit
*
* @param KeyBenefit $keyBenefit
*/
public function removeKeyBenefit(KeyBenefit $keyBenefit)
{
$this->keyBenefits->removeElement($keyBenefit);
}
/**
* Get keyBenefits
*
* @return Collection
*/
public function getKeyBenefits()
{
return $this->keyBenefits;
}
/**
* Set keyBenefits
*
*/
public function setKeyBenefits(array $keyBenefits)
{
$this->keyBenefits = $keyBenefits;
}
/**
* Get category
*
* @return SonataClassificationCategory
*/
public function getCategory()
{
return $this->category;
}
/**
* Set category
*
* @param SonataClassificationCategory $category
*
* @return Product
*/
public function setCategory(SonataClassificationCategory $category = null)
{
$this->category = $category;
return $this;
}
/**
* Get slug
*
* @return string
*/
public function getSlug()
{
return $this->slug;
}
/**
* Set slug
*
* @param string $slug
*
* @return Product
*/
public function setSlug($slug)
{
$this->slug = $slug;
return $this;
}
/**
* Get publish
*
* @return boolean
*/
public function getPublish()
{
return $this->publish;
}
/**
* Set publish
*
* @param boolean $publish
*/
public function setPublish($publish)
{
$this->publish = $publish;
}
/**
* Add declinaison
*
* @param ProductDeclinaison $declinaison
*
* @return Product
*/
public function addDeclinaison(ProductDeclinaison $declinaison)
{
$declinaison->setProduct($this);
$this->declinaison->add($declinaison);
return $this;
}
/**
* Remove declinaison
*
* @param ProductDeclinaison $declinaison
*/
public function removeDeclinaison(ProductDeclinaison $declinaison)
{
$this->declinaison->removeElement($declinaison);
}
/**
* Get declinaison
*
* @return Collection
*/
public function getDeclinaison()
{
return $this->declinaison;
}
/**
* @return mixed
*/
public function getPosition()
{
return $this->position;
}
/**
* @param integer $position
*/
public function setPosition($position): void
{
$this->position = $position;
}
}