src/Entity/Media.php line 70
<?phpnamespace App\Entity;use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;use ApiPlatform\Metadata\ApiFilter;use ApiPlatform\Metadata\ApiResource;use ApiPlatform\Metadata\Delete;use ApiPlatform\Metadata\GetCollection;use ApiPlatform\Metadata\Post;use ApiPlatform\OpenApi\Model\Operation;use ApiPlatform\OpenApi\Model\RequestBody;use App\Controller\MediaController;use App\Controller\MediaDeleteController;use App\Controller\MediaGetController;use App\Controller\ProjectsController;use App\Entity\Traits\CreatedAtTrait;use App\Entity\Traits\UpdatedAtTrait;use App\Repository\MediaRepository;use Doctrine\ORM\Mapping as ORM;use Liip\ImagineBundle\Imagine\Cache\CacheManager;use Symfony\Component\Filesystem\Filesystem;use Symfony\Component\HttpFoundation\File\File;use Symfony\Component\Serializer\Annotation\Groups;use Vich\UploaderBundle\Mapping\Annotation as Vich;#[ORM\HasLifecycleCallbacks]#[Vich\Uploadable]#[ORM\Entity(repositoryClass: MediaRepository::class)]#[ApiResource(operations: [new GetCollection(uriTemplate: '/user/medias',controller: MediaGetController::class,normalizationContext: ['groups' => ['media:read']],security: "is_granted('ROLE_USER')"),new Post(uriTemplate: '/user/medias',controller: MediaController::class,openapi: new Operation(requestBody: new RequestBody(content: new \ArrayObject(['multipart/form-data' => ['schema' => ['type' => 'object','properties' => ['mediaFile' => ['type' => 'string','format' => 'binary']]]]]))),security: "is_granted('ROLE_USER')",deserialize: false,),new Delete(uriTemplate: '/user/medias/{id}',controller: MediaDeleteController::class,security: "is_granted('ROLE_USER')")],normalizationContext: ['groups' => 'media:read'],)]#[ApiFilter(SearchFilter::class, properties: ['mimeType' => 'partial'])]class Media{use CreatedAtTrait;use UpdatedAtTrait;#[ORM\Id]#[ORM\GeneratedValue]#[ORM\Column]#[Groups(['media:read'])]private ?int $id = null;#[ORM\Column(length: 255, nullable: true)]#[Groups(['media:read'])]private ?string $mimeType = null;#[Vich\UploadableField(mapping: 'media_file', fileNameProperty: 'media')]private ?File $mediaFile = null;#[ORM\Column(length: 255, nullable: true)]#[Groups(['media:read'])]private ?string $media = null;#[ORM\Column(length: 255)]#[Groups(['media:read'])]private ?string $fileName = null;#[ORM\ManyToOne(inversedBy: 'media')]private ?Directories $directory = null;#[ORM\ManyToOne(inversedBy: 'medias')]private ?Client $client = null;public function getId(): ?int{return $this->id;}public function getMimeType(): ?string{return $this->mimeType;}public function setMimeType(string $mimeType): static{$this->mimeType = $mimeType;return $this;}public function getMedia(): ?string{return $this->media;}public function setMedia(?string $media): self{$this->media = $media;return $this;}public function getMediaFile(): ?File{return $this->mediaFile;}public function setMediaFile(?File $mediaFile): void{$this->mediaFile = $mediaFile;if (null !== $mediaFile) {$this->updatedAt = new \DateTime();}}public function getFileName(): ?string{return $this->fileName;}public function setFileName(string $fileName): static{$this->fileName = $fileName;return $this;}public function getThumbnail(CacheManager $cacheManager, string $filter): ?string{if (null === $this->media || str_contains($this->mimeType, 'audio')) {return null;}$path = '/media/' . $this->media;if (!str_contains($this->mimeType, 'image')) {$path = '/media/' . explode('.', $this->media)[0] . '.jpg';}return parse_url($cacheManager->getBrowserPath($path, $filter))['path'];}#[Orm\PreRemove]public function removeMedia(): void{if (!str_contains($this->mimeType, 'image')) {$filesystem = new Filesystem();$path = 'media/' . explode('.', $this->media)[0] . '.jpg';$cachePath = 'media/cache/thumb_300x300/media/' . explode('.', $this->media)[0] . '.jpg';if ($filesystem->exists($path)) {$filesystem->remove($path);}if ($filesystem->exists($cachePath)) {$filesystem->remove($cachePath);}}}public function getDirectory(): ?Directories{return $this->directory;}public function setDirectory(?Directories $directory): static{$this->directory = $directory;return $this;}public function getClient(): ?Client{return $this->client;}public function setClient(?Client $client): static{$this->client = $client;return $this;}}