src/Entity/Media.php line 70

  1. <?php
  2. namespace App\Entity;
  3. use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
  4. use ApiPlatform\Metadata\ApiFilter;
  5. use ApiPlatform\Metadata\ApiResource;
  6. use ApiPlatform\Metadata\Delete;
  7. use ApiPlatform\Metadata\GetCollection;
  8. use ApiPlatform\Metadata\Post;
  9. use ApiPlatform\OpenApi\Model\Operation;
  10. use ApiPlatform\OpenApi\Model\RequestBody;
  11. use App\Controller\MediaController;
  12. use App\Controller\MediaDeleteController;
  13. use App\Controller\MediaGetController;
  14. use App\Controller\ProjectsController;
  15. use App\Entity\Traits\CreatedAtTrait;
  16. use App\Entity\Traits\UpdatedAtTrait;
  17. use App\Repository\MediaRepository;
  18. use Doctrine\ORM\Mapping as ORM;
  19. use Liip\ImagineBundle\Imagine\Cache\CacheManager;
  20. use Symfony\Component\Filesystem\Filesystem;
  21. use Symfony\Component\HttpFoundation\File\File;
  22. use Symfony\Component\Serializer\Annotation\Groups;
  23. use Vich\UploaderBundle\Mapping\Annotation as Vich;
  24. #[ORM\HasLifecycleCallbacks]
  25. #[Vich\Uploadable]
  26. #[ORM\Entity(repositoryClassMediaRepository::class)]
  27. #[ApiResource(
  28.     operations: [
  29.         new GetCollection(
  30.             uriTemplate'/user/medias',
  31.             controllerMediaGetController::class,
  32.             normalizationContext: ['groups' => ['media:read']],
  33.             security"is_granted('ROLE_USER')"
  34.         ),
  35.         new Post(
  36.             uriTemplate'/user/medias',
  37.             controllerMediaController::class,
  38.             openapi: new Operation(
  39.                 requestBody: new RequestBody(
  40.                     content: new \ArrayObject([
  41.                         'multipart/form-data' => [
  42.                             'schema' => [
  43.                                 'type' => 'object',
  44.                                 'properties' => [
  45.                                     'mediaFile' => [
  46.                                         'type' => 'string',
  47.                                         'format' => 'binary'
  48.                                     ]
  49.                                 ]
  50.                             ]
  51.                         ]
  52.                     ])
  53.                 )
  54.             ),
  55.             security"is_granted('ROLE_USER')",
  56.             deserializefalse,
  57.         ),
  58.         new Delete(
  59.             uriTemplate'/user/medias/{id}',
  60.             controllerMediaDeleteController::class,
  61.             security"is_granted('ROLE_USER')"
  62.         )
  63.     ],
  64.     normalizationContext: ['groups' => 'media:read'],
  65. )]
  66. #[ApiFilter(SearchFilter::class, properties: ['mimeType' => 'partial'])]
  67. class Media
  68. {
  69.     use CreatedAtTrait;
  70.     use UpdatedAtTrait;
  71.     #[ORM\Id]
  72.     #[ORM\GeneratedValue]
  73.     #[ORM\Column]
  74.     #[Groups(['media:read'])]
  75.     private ?int $id null;
  76.     #[ORM\Column(length255nullabletrue)]
  77.     #[Groups(['media:read'])]
  78.     private ?string $mimeType null;
  79.     #[Vich\UploadableField(mapping'media_file'fileNameProperty'media')]
  80.     private ?File $mediaFile null;
  81.     #[ORM\Column(length255nullabletrue)]
  82.     #[Groups(['media:read'])]
  83.     private ?string $media null;
  84.     #[ORM\Column(length255)]
  85.     #[Groups(['media:read'])]
  86.     private ?string $fileName null;
  87.     #[ORM\ManyToOne(inversedBy'media')]
  88.     private ?Directories $directory null;
  89.     #[ORM\ManyToOne(inversedBy'medias')]
  90.     private ?Client $client null;
  91.     public function getId(): ?int
  92.     {
  93.         return $this->id;
  94.     }
  95.     public function getMimeType(): ?string
  96.     {
  97.         return $this->mimeType;
  98.     }
  99.     public function setMimeType(string $mimeType): static
  100.     {
  101.         $this->mimeType $mimeType;
  102.         return $this;
  103.     }
  104.     public function getMedia(): ?string
  105.     {
  106.         return $this->media;
  107.     }
  108.     public function setMedia(?string $media): self
  109.     {
  110.         $this->media $media;
  111.         return $this;
  112.     }
  113.     public function getMediaFile(): ?File
  114.     {
  115.         return $this->mediaFile;
  116.     }
  117.     public function setMediaFile(?File $mediaFile): void
  118.     {
  119.         $this->mediaFile $mediaFile;
  120.         if (null !== $mediaFile) {
  121.             $this->updatedAt = new \DateTime();
  122.         }
  123.     }
  124.     public function getFileName(): ?string
  125.     {
  126.         return $this->fileName;
  127.     }
  128.     public function setFileName(string $fileName): static
  129.     {
  130.         $this->fileName $fileName;
  131.         return $this;
  132.     }
  133.     public function getThumbnail(CacheManager $cacheManagerstring $filter): ?string
  134.     {
  135.         if (null === $this->media || str_contains($this->mimeType'audio')) {
  136.             return null;
  137.         }
  138.         $path '/media/' $this->media;
  139.         if (!str_contains($this->mimeType'image')) {
  140.             $path '/media/' explode('.'$this->media)[0] . '.jpg';
  141.         }
  142.         return parse_url($cacheManager->getBrowserPath($path$filter))['path'];
  143.     }
  144.     #[Orm\PreRemove]
  145.     public function removeMedia(): void
  146.     {
  147.         if (!str_contains($this->mimeType'image')) {
  148.             $filesystem = new Filesystem();
  149.             $path 'media/' explode('.'$this->media)[0] . '.jpg';
  150.             $cachePath 'media/cache/thumb_300x300/media/' explode('.'$this->media)[0] . '.jpg';
  151.             if ($filesystem->exists($path)) {
  152.                 $filesystem->remove($path);
  153.             }
  154.             if ($filesystem->exists($cachePath)) {
  155.                 $filesystem->remove($cachePath);
  156.             }
  157.         }
  158.     }
  159.     public function getDirectory(): ?Directories
  160.     {
  161.         return $this->directory;
  162.     }
  163.     public function setDirectory(?Directories $directory): static
  164.     {
  165.         $this->directory $directory;
  166.         return $this;
  167.     }
  168.     public function getClient(): ?Client
  169.     {
  170.         return $this->client;
  171.     }
  172.     public function setClient(?Client $client): static
  173.     {
  174.         $this->client $client;
  175.         return $this;
  176.     }
  177. }