<?php
namespace App\Entity;
use App\Repository\BlogPostRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
use Symfony\Component\HttpFoundation\File\File;
/**
* @ORM\Entity(repositoryClass=BlogPostRepository::class)
* @Vich\Uploadable
*/
class BlogPost implements WithQRCodeInterface, PositionedInterface
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=150, nullable=true)
*/
private $title;
/**
* @ORM\Column(type="string", length=255, nullable=false)
*/
private $slug;
/**
* @ORM\Column(type="text", nullable=true)
* @Assert\Regex(
* pattern="/(<\s*svg\b|data:image\/svg\+xml)/i",
* match=false,
* message="Les balises ou contenus SVG sont interdits dans la description."
* )
*/
private $description;
/**
* @return string|null
*/
public function getTitle(): ?string
{
return $this->title;
}
/**
* @param string $title
* @return $this
*/
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
/**
* @return string|null
*/
public function getSlug(): ?string
{
return $this->slug;
}
/**
* @param string $slug
* @return $this
*/
public function setSlug(string $slug): self
{
$this->slug = $slug;
return $this;
}
/**
* @return string|null
*/
public function getDescription(): ?string
{
return $this->description;
}
/**
* @param ?string $description
* @return $this
*/
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
/**
* @ORM\Column(type="boolean")
*/
private $isActivated = false;
/**
* @ORM\Column(type="datetime")
*/
private $createdAt;
/**
* @ORM\Column(type="datetime")
*/
private $updatedAt;
/**
* @ORM\ManyToOne(targetEntity=BlogPostCategory::class, inversedBy="blogPosts")
* @ORM\JoinColumn(nullable=false)
* @Assert\NotNull(message="La rubrique est obligatoire.")
*/
private $blogPostCategory;
/**
* @ORM\OneToOne(targetEntity=Seo::class, cascade={"persist", "remove"})
*/
private $seo;
/**
* @ORM\Column(type="boolean", options={"default": false})
*/
private $isFeatured = false;
/**
* @ORM\Column(type="boolean", options={"default": false})
*/
private $isFeaturedTitle = false;
/**
* @ORM\OneToOne(targetEntity=Media::class, cascade={"persist"})
*/
#[Assert\NotNull(message: 'L’image de prévisualisation (Vignette) est obligatoire.')]
private $imagePreviewMedia;
/**
* @ORM\OneToOne(targetEntity=Media::class, cascade={"persist", "remove"})
*/
private $featuringImageMedia;
/**
* @ORM\Column(type="boolean", options={"default": false}, nullable=true))
*/
private $isPublic = false;
/**
* @ORM\Column(type="integer")
*/
private $position = 0;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $qrCode;
/**
* @ORM\ManyToOne(targetEntity=Media::class, cascade={"persist", "remove"})
*/
private $media;
/**
* @ORM\OneToOne(targetEntity=Media::class, cascade={"persist", "remove"})
*/
private $previewVideo;
/**
* @ORM\OneToMany(targetEntity=BlogPostLike::class, mappedBy="blogPost", orphanRemoval=true)
*/
private $likes;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $notificationSentAt;
/**
* @ORM\OneToOne(inversedBy="blogPost", targetEntity=BlogPostNotification::class, cascade={"persist", "remove"})
*/
private $notification;
/**
* @ORM\Column(type="boolean", options={"default": false}, nullable=true)
*/
private $isNotify;
/**
* @ORM\Column(type="boolean", options={"default": false}, nullable=true)
*/
private $isScheduled = false;
/**
* @ORM\OneToMany(targetEntity=BlogPostHistoryUpdate::class, mappedBy="blogPost", orphanRemoval=true)
*/
private $blogPostHistoryUpdates;
/**
* @ORM\ManyToOne(targetEntity=Preference::class, inversedBy="blogPosts")
*/
private $preference;
/**
* @ORM\ManyToMany(targetEntity=Roles::class)
*/
private $roles;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $activation_date;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $desactivation_date;
/**
* @ORM\OneToMany(targetEntity=BlogPostGallery::class, mappedBy="blogPost", cascade={"remove"})
*/
private $galleries;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="blogPosts")
*/
private $author;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $hasAllCriteria1;
/**
* @ORM\ManyToMany(targetEntity=Criteria1Item::class)
*/
private $criteria1Items;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $hasAllCriteria2;
/**
* @ORM\ManyToMany(targetEntity=Criteria2Item::class)
*/
private $criteria2Items;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $hasAllCriteria3;
/**
* @ORM\ManyToMany(targetEntity=Criteria3Item::class)
*/
private $criteria3Items;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $hasAllCriteria4;
/**
* @ORM\ManyToMany(targetEntity=Criteria4Item::class)
*/
private $criteria4Items;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
private $hasAllCriteria5;
/**
* @ORM\ManyToMany(targetEntity=Criteria5Item::class)
*/
private $criteria5Items;
/**
* @ORM\OneToOne(targetEntity=ScoringQuiz::class, mappedBy="blogPost", cascade={"persist", "remove"})
*/
private $scoringQuiz;
/**
* @ORM\OneToOne(targetEntity=IdentityForm::class, mappedBy="blogPost", cascade={"persist", "remove"})
*/
private $identityForm;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $identityField1;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $identityField2;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $identityField3;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $identityField4;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $identityField5;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $identityField6;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $identityField7;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $identityTextarea;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $identityMedia;
/**
* @Vich\UploadableField(mapping="identity_media", fileNameProperty="identityMedia")
* @var File|null
*/
private $identityMediaFile;
/**
* @ORM\OneToMany(targetEntity=UserIdentityForm::class, mappedBy="blogPost", cascade={"persist", "remove"}, orphanRemoval=true)
*/
private $userIdentityForms;
/**
* @ORM\ManyToMany(targetEntity=Instance::class, inversedBy="blogPosts")
*/
private Collection $instances;
public function __construct()
{
$this->createdAt = new \DateTime();
$this->updatedAt = new \DateTime();
$this->likes = new ArrayCollection();
$this->blogPostHistoryUpdates = new ArrayCollection();
$this->roles = new ArrayCollection();
$this->galleries = new ArrayCollection();
$this->criteria1Items = new ArrayCollection();
$this->criteria2Items = new ArrayCollection();
$this->criteria3Items = new ArrayCollection();
$this->criteria4Items = new ArrayCollection();
$this->criteria5Items = new ArrayCollection();
$this->userIdentityForms = new ArrayCollection();
$this->instances = new ArrayCollection();
}
/**
* @return int|null
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @return bool|null
*/
public function getIsActivated(): ?bool
{
return $this->isActivated;
}
/**
* @param bool $isActivated
* @return $this
*/
public function setIsActivated(bool $isActivated): self
{
$this->isActivated = $isActivated;
return $this;
}
/**
* @return \DateTimeInterface|null
*/
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->createdAt;
}
/**
* @param \DateTimeInterface $createdAt
* @return $this
*/
public function setCreatedAt(\DateTimeInterface $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
/**
* @return \DateTimeInterface|null
*/
public function getUpdatedAt(): ?\DateTimeInterface
{
return $this->updatedAt;
}
/**
* @param \DateTimeInterface $updatedAt
* @return $this
*/
public function setUpdatedAt(\DateTimeInterface $updatedAt): self
{
$this->updatedAt = $updatedAt;
return $this;
}
public function getBlogPostCategory(): ?BlogPostCategory
{
return $this->blogPostCategory;
}
public function setBlogPostCategory(?BlogPostCategory $blogPostCategory): self
{
$this->blogPostCategory = $blogPostCategory;
return $this;
}
public function __toString(): string
{
return $this->getTitle() ?? '';
}
public function getSeo(): ?Seo
{
return $this->seo;
}
public function setSeo(?Seo $seo): self
{
$this->seo = $seo;
return $this;
}
public function getIsFeatured(): ?bool
{
return $this->isFeatured;
}
public function setIsFeatured(bool $isFeatured): self
{
$this->isFeatured = $isFeatured;
return $this;
}
public function getIsFeaturedTitle(): ?bool
{
return $this->isFeaturedTitle;
}
public function setIsFeaturedTitle(bool $isFeaturedTitle): self
{
$this->isFeaturedTitle = $isFeaturedTitle;
return $this;
}
public function getImagePreviewMedia(): ?Media
{
return $this->imagePreviewMedia;
}
public function setImagePreviewMedia(?Media $imagePreviewMedia): self
{
$this->imagePreviewMedia = $imagePreviewMedia;
return $this;
}
public function getFeaturingImageMedia(): ?Media
{
return $this->featuringImageMedia;
}
public function setFeaturingImageMedia(?Media $featuringImageMedia): self
{
$this->featuringImageMedia = $featuringImageMedia;
return $this;
}
public function getIsPublic(): ?bool
{
return $this->isPublic;
}
public function setIsPublic(bool $isPublic): self
{
$this->isPublic = $isPublic;
return $this;
}
public function getPosition(): ?int
{
return $this->position;
}
public function setPosition(int $position): self
{
$this->position = $position;
return $this;
}
public function getIsPrivate(): bool
{
return !$this->isPublic;
}
public function getQrCode(): ?string
{
return $this->qrCode;
}
public function setQrCode(string $qrCode): self
{
$this->qrCode = $qrCode;
return $this;
}
public function getQrCodeRouteName(): string
{
return 'podcast';
}
public function getQrCodeRouteParams(): array
{
return [
'slug' => $this->getSlug(),
];
}
public function getMedia(): ?Media
{
return $this->media;
}
public function setMedia(?Media $media): self
{
$this->media = $media;
return $this;
}
public function getPreviewVideo(): ?Media
{
return $this->previewVideo;
}
public function setPreviewVideo(?Media $previewVideo): self
{
$this->previewVideo = $previewVideo;
return $this;
}
/**
* @return Collection|BlogPostLike[]
*/
public function getLikes(): Collection
{
return $this->likes;
}
public function getLikeCount(): int
{
return $this->likes->count();
}
public function isLikedBy(?User $user): bool
{
return $this->likes->exists(function (int $index) use ($user) {
$like = $this->likes->get($index);
return $user && $like->getUser() === $user;
});
}
public function addLike(BlogPostLike $like): self
{
if (!$this->likes->contains($like)) {
$this->likes[] = $like;
$like->setBlogPost($this);
}
return $this;
}
public function removeLike(BlogPostLike $like): self
{
if ($this->likes->removeElement($like)) {
// set the owning side to null (unless already changed)
if ($like->getBlogPost() === $this) {
$like->setBlogPost(null);
}
}
return $this;
}
/**
* @return \DateTimeInterface|null
*/
public function getNotificationSentAt(): ?\DateTimeInterface
{
return $this->notificationSentAt;
}
public function setNotificationSentAt(?\DateTimeInterface $notificationSentAt): self
{
$this->notificationSentAt = $notificationSentAt;
return $this;
}
public function getNotification(): ?BlogPostNotification
{
return $this->notification;
}
public function setNotification(?BlogPostNotification $notification): self
{
$this->notification = $notification;
return $this;
}
public function getIsNotify(): ?bool
{
return $this->isNotify;
}
public function setIsNotify(bool $isNotify): self
{
$this->isNotify = $isNotify;
return $this;
}
public function getIsScheduled(): ?bool
{
return $this->isScheduled;
}
public function setIsScheduled(bool $isScheduled): self
{
$this->isScheduled = $isScheduled;
return $this;
}
/**
* @return Collection<int, BlogPostHistoryUpdate>
*/
public function getBlogPostHistoryUpdates(): Collection
{
return $this->blogPostHistoryUpdates;
}
public function addBlogPostHistoryUpdate(BlogPostHistoryUpdate $blogPostHistoryUpdate): self
{
if (!$this->blogPostHistoryUpdates->contains($blogPostHistoryUpdate)) {
$this->blogPostHistoryUpdates[] = $blogPostHistoryUpdate;
$blogPostHistoryUpdate->setBlogPost($this);
}
return $this;
}
public function removeBlogPostHistoryUpdate(BlogPostHistoryUpdate $blogPostHistoryUpdate): self
{
if ($this->blogPostHistoryUpdates->removeElement($blogPostHistoryUpdate)) {
// set the owning side to null (unless already changed)
if ($blogPostHistoryUpdate->getBlogPost() === $this) {
$blogPostHistoryUpdate->setBlogPost(null);
}
}
return $this;
}
public function getPreference(): ?Preference
{
return $this->preference;
}
public function setPreference(?Preference $preference): self
{
$this->preference = $preference;
return $this;
}
/**
* @return Collection<int, Roles>
*/
public function getRoles(): Collection
{
return $this->roles;
}
public function addRole(Roles $role): self
{
if (!$this->roles->contains($role)) {
$this->roles[] = $role;
}
return $this;
}
public function setRoles(Collection $roles): self
{
$this->roles == $roles;
return $this;
}
public function removeRole(Roles $role): self
{
$this->roles->removeElement($role);
return $this;
}
public function convertRoleToArray()
{
$rolesArray = [];
foreach ($this->roles as $role) {
$rolesArray[] = $role->getCode();
}
return $rolesArray;
}
public function getActivationDate(): ?\DateTimeInterface
{
return $this->activation_date;
}
public function setActivationDate(?\DateTimeInterface $activation_date): self
{
$this->activation_date = $activation_date;
return $this;
}
public function getDesactivationDate(): ?\DateTimeInterface
{
return $this->desactivation_date;
}
public function setDesactivationDate(?\DateTimeInterface $desactivation_date): self
{
$this->desactivation_date = $desactivation_date;
return $this;
}
/**
* @return Collection<int, BlogPostGallery>
*/
public function getGalleries(): Collection
{
return $this->galleries;
}
public function addGallery(BlogPostGallery $gallery): self
{
if (!$this->galleries->contains($gallery)) {
$this->galleries[] = $gallery;
$gallery->setBlogPost($this);
}
return $this;
}
public function removeGallery(BlogPostGallery $gallery): self
{
if ($this->galleries->removeElement($gallery)) {
// set the owning side to null (unless already changed)
if ($gallery->getBlogPost() === $this) {
$gallery->setBlogPost(null);
}
}
return $this;
}
public function getAuthor(): ?User
{
return $this->author;
}
public function setAuthor(?User $author): self
{
$this->author = $author;
return $this;
}
public function isHasAllCriteria1(): ?bool
{
return $this->hasAllCriteria1;
}
public function setHasAllCriteria1(?bool $hasAllCriteria1): self
{
$this->hasAllCriteria1 = $hasAllCriteria1;
return $this;
}
/**
* @return Collection<int, Criteria1Item>
*/
public function getCriteria1Items(): Collection
{
return $this->criteria1Items;
}
public function addCriteria1Item(Criteria1Item $criteria1Item): self
{
if (!$this->criteria1Items->contains($criteria1Item)) {
$this->criteria1Items[] = $criteria1Item;
}
return $this;
}
public function removeCriteria1Item(Criteria1Item $criteria1Item): self
{
$this->criteria1Items->removeElement($criteria1Item);
return $this;
}
public function isHasAllCriteria2(): ?bool
{
return $this->hasAllCriteria2;
}
public function setHasAllCriteria2(?bool $hasAllCriteria2): self
{
$this->hasAllCriteria2 = $hasAllCriteria2;
return $this;
}
/**
* @return Collection<int, Criteria2Item>
*/
public function getCriteria2Items(): Collection
{
return $this->criteria2Items;
}
public function addCriteria2Item(Criteria2Item $criteria2Item): self
{
if (!$this->criteria2Items->contains($criteria2Item)) {
$this->criteria2Items[] = $criteria2Item;
}
return $this;
}
public function removeCriteria2Item(Criteria2Item $criteria2Item): self
{
$this->criteria2Items->removeElement($criteria2Item);
return $this;
}
public function isHasAllCriteria3(): ?bool
{
return $this->hasAllCriteria3;
}
public function setHasAllCriteria3(?bool $hasAllCriteria3): self
{
$this->hasAllCriteria3 = $hasAllCriteria3;
return $this;
}
/**
* @return Collection<int, Criteria3Item>
*/
public function getCriteria3Items(): Collection
{
return $this->criteria3Items;
}
public function addCriteria3Item(Criteria3Item $criteria3Item): self
{
if (!$this->criteria3Items->contains($criteria3Item)) {
$this->criteria3Items[] = $criteria3Item;
}
return $this;
}
public function removeCriteria3Item(Criteria3Item $criteria3Item): self
{
$this->criteria3Items->removeElement($criteria3Item);
return $this;
}
public function isHasAllCriteria4(): ?bool
{
return $this->hasAllCriteria4;
}
public function setHasAllCriteria4(?bool $hasAllCriteria4): self
{
$this->hasAllCriteria4 = $hasAllCriteria4;
return $this;
}
/**
* @return Collection<int, Criteria4Item>
*/
public function getCriteria4Items(): Collection
{
return $this->criteria4Items;
}
public function addCriteria4Item(Criteria4Item $criteria4Item): self
{
if (!$this->criteria4Items->contains($criteria4Item)) {
$this->criteria4Items[] = $criteria4Item;
}
return $this;
}
public function removeCriteria4Item(Criteria4Item $criteria4Item): self
{
$this->criteria4Items->removeElement($criteria4Item);
return $this;
}
public function isHasAllCriteria5(): ?bool
{
return $this->hasAllCriteria5;
}
public function setHasAllCriteria5(?bool $hasAllCriteria5): self
{
$this->hasAllCriteria5 = $hasAllCriteria5;
return $this;
}
/**
* @return Collection<int, Criteria5Item>
*/
public function getCriteria5Items(): Collection
{
return $this->criteria5Items;
}
public function addCriteria5Item(Criteria5Item $criteria5Item): self
{
if (!$this->criteria5Items->contains($criteria5Item)) {
$this->criteria5Items[] = $criteria5Item;
}
return $this;
}
public function removeCriteria5Item(Criteria5Item $criteria5Item): self
{
$this->criteria5Items->removeElement($criteria5Item);
return $this;
}
public function getScoringQuiz(): ?ScoringQuiz
{
return $this->scoringQuiz;
}
public function setScoringQuiz(?ScoringQuiz $scoringQuiz): ?self
{
$this->scoringQuiz = $scoringQuiz;
return $this;
}
public function setBlogPost(ScoringQuiz $scoringQuiz): self
{
// set the owning side of the relation if necessary
if ($scoringQuiz->getBlogPost() !== $this) {
$scoringQuiz->setBlogPost($this);
}
$this->scoringQuiz = $scoringQuiz;
return $this;
}
public function getIdentityForm(): ?IdentityForm
{
return $this->identityForm;
}
public function setIdentityForm(?IdentityForm $identityForm): self
{
if ($identityForm && $identityForm->getBlogPost() !== $this) {
$identityForm->setBlogPost($this);
}
$this->identityForm = $identityForm;
return $this;
}
public function getIdentityField1(): ?string
{
return $this->identityField1;
}
public function setIdentityField1(?string $identityField1): self
{
$this->identityField1 = $identityField1;
return $this;
}
public function getIdentityField2(): ?string
{
return $this->identityField2;
}
public function setIdentityField2(?string $identityField2): self
{
$this->identityField2 = $identityField2;
return $this;
}
public function getIdentityField3(): ?string
{
return $this->identityField3;
}
public function setIdentityField3(?string $identityField3): self
{
$this->identityField3 = $identityField3;
return $this;
}
public function getIdentityField4(): ?string
{
return $this->identityField4;
}
public function setIdentityField4(?string $identityField4): self
{
$this->identityField4 = $identityField4;
return $this;
}
public function getIdentityField5(): ?string
{
return $this->identityField5;
}
public function setIdentityField5(?string $identityField5): self
{
$this->identityField5 = $identityField5;
return $this;
}
public function getIdentityField6(): ?string
{
return $this->identityField6;
}
public function setIdentityField6(?string $identityField6): self
{
$this->identityField6 = $identityField6;
return $this;
}
public function getIdentityField7(): ?string
{
return $this->identityField7;
}
public function setIdentityField7(?string $identityField7): self
{
$this->identityField7 = $identityField7;
return $this;
}
public function getIdentityTextarea(): ?string
{
return $this->identityTextarea;
}
public function setIdentityTextarea(?string $identityTextarea): self
{
$this->identityTextarea = $identityTextarea;
return $this;
}
public function setIdentityMediaFile(?File $file = null): void
{
$this->identityMediaFile = $file;
if (null !== $file) {
$this->updatedAt = new \DateTimeImmutable();
}
}
public function getIdentityMediaFile(): ?File
{
return $this->identityMediaFile;
}
public function setIdentityMedia(?String $media): self
{
$this->identityMedia = $media;
return $this;
}
public function getIdentityMedia(): ?string
{
return $this->identityMedia;
}
public function getUserIdentityForms(): Collection
{
return $this->userIdentityForms;
}
public function getUserIdentityForm(User $user): ?UserIdentityForm
{
foreach ($this->userIdentityForms as $form) {
if ($form->getUser() === $user) {
return $form;
}
}
return null;
}
public function addUserIdentityForm(UserIdentityForm $userIdentityForm): self
{
if (!$this->userIdentityForms->contains($userIdentityForm)) {
$this->userIdentityForms[] = $userIdentityForm;
$userIdentityForm->setBlogPost($this);
}
return $this;
}
public function removeUserIdentityForm(UserIdentityForm $userIdentityForm): self
{
if ($this->userIdentityForms->removeElement($userIdentityForm)) {
if ($userIdentityForm->getBlogPost() === $this) {
$userIdentityForm->setBlogPost(null);
}
}
return $this;
}
/**
* @return Collection<int, Instance>
*/
public function getInstances(): Collection
{
return $this->instances;
}
public function addInstance(Instance $instance): self
{
if (!$this->instances->contains($instance)) {
$this->instances[] = $instance;
}
return $this;
}
public function removeInstance(Instance $instance): self
{
$this->instances->removeElement($instance);
return $this;
}
public function getInstancesList(): string
{
return implode(', ', $this->instances->toArray());
}
}