<?php
declare(strict_types=1);
namespace App\Entity\Franchise;
use App\Entity\Admin\MediaName;
use App\Entity\Traits\ImageUrlTrait;
use App\Entity\Traits\TimestampableTrait;
use App\Repository\Franchise\MediaRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
use Vich\UploaderBundle\Entity\File as EmbeddedFile;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
/**
* @ORM\Entity(repositoryClass=MediaRepository::class)
* @Vich\Uploadable
* @ORM\HasLifecycleCallbacks
*/
class Media implements MediaInterface, \Serializable
{
use ImageUrlTrait;
use TimestampableTrait;
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
#[Groups(['get:franchise'])]
private ?string $format = null;
#[Groups(['get:franchise'])]
private ?string $typeFile = null;
/**
* @ORM\Embedded(class="Vich\UploaderBundle\Entity\File")
*
* @var EmbeddedFile
*/
private $url;
/**
* @Vich\UploadableField(mapping="medias_images", fileNameProperty="url.name", size="url.size", mimeType="url.mimeType", originalName="url.originalName", dimensions="url.dimensions")
* @Assert\File(
* mimeTypes={"image/jpeg", "image/png", "image/gif", "image/bmp", "image/tiff"},
* mimeTypesMessage="file.mime_types_image.message",
* maxSize="2M",
* maxSizeMessage="file.max_size.message"
* )
*
* @var null|File
*/
private $mediaFile;
/**
* @Vich\UploadableField(mapping="medias_images", fileNameProperty="url.name", size="url.size", mimeType="url.mimeType", originalName="url.originalName", dimensions="url.dimensions")
* @Assert\File(
* mimeTypes={"video/*"},
* mimeTypesMessage="file.mime_types_video.message",
* maxSize="5M",
* maxSizeMessage="file.max_size.message"
* )
*
* @var null|File
*/
private $videoFile;
/**
* @ORM\ManyToOne(targetEntity=Franchise::class, inversedBy="media")
* @ORM\JoinColumn(nullable=false)
*/
private $franchise;
/**
* @ORM\ManyToOne(targetEntity=MediaName::class, inversedBy="medias")
* @ORM\JoinColumn(nullable=false)
*/
private $mediaName;
#[Groups(['get:franchise'])]
private $code;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
#[Groups(['get:franchise', 'fixtures:franchise'])]
private $type;
private $fileType;
/**
* @ORM\Column(type="boolean", options={"default": true })
*/
#[Groups(['get:franchise'])]
private $displayOnMenuSection = true;
public function __construct()
{
$this->url = new EmbeddedFile();
}
public function getId(): ?int
{
return $this->id;
}
public function getUrl(): ?EmbeddedFile
{
return $this->url;
}
public function setUrl(?EmbeddedFile $url): void
{
$this->url = $url;
}
/**
* @param null|File|UploadedFile $image
*/
public function setMediaFile(File $image = null): void
{
$this->mediaFile = $image;
if ($image) {
$this->updatedAt = new \DateTime('now');
}
}
public function getMediaFile(): ?File
{
return $this->mediaFile;
}
/**
* @param null|File|UploadedFile $video
*/
public function setVideoFile(File $video = null): void
{
$this->videoFile = $video;
if ($video) {
$this->updatedAt = new \DateTime('now');
}
}
public function getVideoFile(): ?File
{
return $this->videoFile;
}
public function getFranchise(): ?Franchise
{
return $this->franchise;
}
public function setFranchise(?Franchise $franchise): self
{
$this->franchise = $franchise;
return $this;
}
public function getMediaName(): ?MediaName
{
return $this->mediaName;
}
public function setMediaName(?MediaName $mediaName): self
{
$this->mediaName = $mediaName;
return $this;
}
public function getCode(): ?string
{
return $this->code;
}
public function setCode(?string $code): self
{
$this->code = $code;
return $this;
}
public function setFormat(?string $format): self
{
$this->format = $format;
return $this;
}
public function getFormat(): ?string
{
return $this->format;
}
public function setTypeFile(?string $typeFile): self
{
$this->typeFile = $typeFile;
return $this;
}
public function getTypeFile(): ?string
{
return $this->typeFile;
}
public function getType(): ?string
{
return $this->type;
}
public function setType(?string $type): self
{
$this->type = $type;
return $this;
}
public function getFileType(): ?string
{
return $this->fileType;
}
public function setFileType(?string $fileType): self
{
$this->fileType = $fileType;
return $this;
}
/**
* Serialize.
*
* @throws \Exception
*/
public function serialize(): string
{
return serialize([$this->id]);
}
/**
* Unserialize.
*
* @throws \Exception
*/
public function unserialize(string $serialized): void
{
[$this->id] = unserialize($serialized);
}
public function isDisplayOnMenuSection(): bool
{
return $this->displayOnMenuSection;
}
public function setDisplayOnMenuSection(bool $displayOnMenuSection): self
{
$this->displayOnMenuSection = $displayOnMenuSection;
return $this;
}
}