src/Entity/ProtectedMedia.php line 69

  1. <?php
  2. namespace App\Entity;
  3. use Doctrine\ORM\Mapping as ORM;
  4. use Symfony\Component\HttpFoundation\File\File,
  5.     Symfony\Component\Validator\Constraint,
  6.     Symfony\Component\Validator\Constraints as Assert;
  7. use ApiPlatform\Metadata\ApiResource,
  8.     ApiPlatform\Metadata\Get,
  9.     ApiPlatform\Metadata\Post;
  10. use Vich\UploaderBundle\Mapping\Annotation as Vich;
  11. use App\Repository\ProtectedMediaRepository;
  12. use App\Controller\CreateProtectedMediaAction,
  13.     App\DTO\CloneDTO,
  14.     App\StateProcessor\CloneProcessor,
  15.     App\Security\Voter\CloneVoter,
  16.     App\Lib\Actions;
  17. use App\Controller\GetProtectedMediaFileAction;
  18. #[ApiResource(
  19.     normalizationContext: ['groups' => ['read''read:' self::class]],
  20.     operations: [
  21.         new Get(
  22.             name'get_protected_media_file',
  23.             uriTemplate'protected_media/{uuid}/file',
  24.             controllerGetProtectedMediaFileAction::class,
  25.         ),
  26.         new Get(),
  27.         new Post(
  28.             uriTemplate'/protected_media/clone',
  29.             inputCloneDTO::class,
  30.             processorCloneProcessor::class,
  31.             security'is_granted("' Actions::CLONE .'")',
  32.             securityMessageCloneVoter::MESSAGE
  33.         ),
  34.         new Post(
  35.             controllerCreateProtectedMediaAction::class,
  36.             deserializefalse,
  37.             validationContext: ['groups' => [Constraint::DEFAULT_GROUP'post']],
  38.             openapiContext: [
  39.                 'requestBody' => [
  40.                     'content' => [
  41.                         'multipart/form-data' => [
  42.                             'schema' => [
  43.                                 'type' => 'object',
  44.                                 'properties' => [
  45.                                     'file' => [
  46.                                         'type' => 'string',
  47.                                         'format' => 'binary'
  48.                                     ]
  49.                                 ]
  50.                             ]
  51.                         ]
  52.                     ]
  53.                 ]
  54.             ]
  55.         )
  56.     ],
  57.     extraProperties: ['standard_put' => false],
  58. )]
  59. #[Vich\Uploadable]
  60. #[ORM\Entity(repositoryClassProtectedMediaRepository::class)]
  61. class ProtectedMedia extends AbstractMedia
  62. {
  63.     #[Vich\UploadableField(mapping'protected_files'fileNameProperty'filePath')]
  64.     #[Assert\NotNull(groups: ['post'])]
  65.     #[Assert\File(
  66.         maxSize'128M',
  67.         mimeTypes: [
  68.             'image/*',
  69.             'video/*',
  70.             'audio/*',
  71.             'font/*',
  72.             'text/*',
  73.             'application/pdf',
  74.             'application/zip',
  75.             'application/vnd.rar',
  76.             'application/gzip',
  77.             'application/epub+zip',
  78.             'application/vnd.ms-excel',
  79.             'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  80.             'application/vnd.ms-powerpoint',
  81.             'application/vnd.oasis.opendocument.spreadsheet',
  82.             'application/msword',
  83.             'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
  84.         ]
  85.     )]
  86.     protected ?File $file null;
  87. }